虽然这个问题很老,而且我同意翻译应该自动发生,但有时它根本不起作用。我的解决方法是在一个包中定义一个 TStringField 后代:
unit MyField;
.
.
.
Type
TMyStringField = class(TStringField)
protected
procedure SetAsString(const Value: string); override;
Function GetAsString : String; Override;
end;
function TMyStringField.GetAsString: String;
begin
Result := inherited Utf8ToAnsi (GetAsString)
end;
procedure TMyStringField.SetAsString(const Value: string);
begin
inherited SetAsString(AnsiToUtf8(Value))
end;
不要忘记注册此字段:
Procedure Register;
begin
RegisterFields([TMyStringField]);
end;
从帮助:
调用 RegisterFields 以允许 TField 的自定义后代出现在新字段对话框的字段类型下拉列表中。
FieldClasses 参数是一个 TField 后代数组。在 C++ 中,FieldClasses_Size 是数组中最后一个类的索引(比类类型的数量少一个)。
这种方法的缺点是必须手动添加字段,或者将TStringField替换为TMyStringField