虽然这个问题很老,而且我同意翻译应该自动发生,但有时它根本不起作用。我的解决方法是在一个包中定义一个 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