如何本地化(覆盖资源字符串) Delphi DevExpres Cx组件的常量?

wz3gfoph  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(141)

我使用的是DevExpress编辑器库6.45中的TcxDBImgage(用于 Delphi 2009),这个图像组件作为内置的弹出菜单组件,带有菜单项“加载”、“保存”等。
我正在开发非英语语言的应用程序,我想覆盖这些菜单项的标题。
我检查了DevExpress Delphi 代码,看看这些标题是如何加载的,代码是:

procedure RefreshCaptions;
  begin
    with FEditPopupMenu do
    begin
      Items[0].Caption := cxGetResourceString(@cxSMenuItemCaptionCut);
      Items[1].Caption := cxGetResourceString(@cxSMenuItemCaptionCopy);
      Items[2].Caption := cxGetResourceString(@cxSMenuItemCaptionPaste);
      Items[3].Caption := cxGetResourceString(@cxSMenuItemCaptionDelete);
      Items[5].Caption := cxGetResourceString(@cxSMenuItemCaptionLoad);
      Items[6].Caption := cxGetResourceString(@cxSMenuItemCaptionSave);
    end;
  end;

function cxGetResourceString(AResString: TcxResourceStringID): string;
var
  AIndex: Integer;
begin
  AIndex := GetResOriginalStringIndex(AResString);
  if AIndex <> -1 then
    Result := FResStrings[AIndex]
  else
    Result := LoadResString(AResString);
end;

字符串
而dcr文件( Delphi 编译器生成的文件)包含常量:

#define cxEditConsts_cxSMenuItemCaptionCut 64713
#define cxEditConsts_cxSMenuItemCaptionCopy 64714
#define cxEditConsts_cxSMenuItemCaptionPaste 64715
#define cxEditConsts_cxSMenuItemCaptionDelete 64716
#define cxEditConsts_cxSMenuItemCaptionLoad 64717
#define cxEditConsts_cxSMenuItemCaptionSave 64718

    cxEditConsts_cxSMenuItemCaptionCut, "Cu&t"
    cxEditConsts_cxSMenuItemCaptionCopy,    "&Copy"
    cxEditConsts_cxSMenuItemCaptionPaste,   "&Paste"
    cxEditConsts_cxSMenuItemCaptionDelete,  "&Delete"
    cxEditConsts_cxSMenuItemCaptionLoad,    "&Load..."
    cxEditConsts_cxSMenuItemCaptionSave,    "Save &As..."


所以,这应该是以某种方式可定制的。可能的问题是-我如何在我的项目的 Delphi 代码中覆盖这些常量,使用TcxDBImage组件?
我应该用某种方式重新定义resourcestrings吗?我应该用STRINGS表创建 *.res文件吗?我检查了我的项目和DevExpress组件的res文件(例如使用Visual Studio作为res文件的编辑器),它们只包含Icon和Version,没有字符串表。
我知道文档https://docs.devexpress.com/VCL/154039/ExpressCrossPlatformLibrary/how-to/localize-an-applicationhttps://docs.devexpress.com/VCL/154011/ExpressCrossPlatformLibrary/concepts/localizer-editor-ui,但我没有Localizer编辑器,我不确定最近的文档是否可以应用于我的DevExpress组件版本。

ijxebb2r

ijxebb2r1#

创建一个如下所示的单元,并将其包含在项目中的uses子句中。当然,您可以以相同的方式更改其他单元中的资源字符串。

unit MxDxLocalization;

interface
implementation

uses
  dxCore, cxClasses, cxEditConsts; // cxGridStrs, cxGridPopupMenuConsts, cxFilterConsts, ...

initialization
  // replace ... with the desired caption
  // cxEditConsts:
  cxSetResourceString(@cxSMenuItemCaptionCut,    '...');
  cxSetResourceString(@cxSMenuItemCaptionCopy,   '...');
  cxSetResourceString(@cxSMenuItemCaptionPaste,  '...');
  cxSetResourceString(@cxSMenuItemCaptionDelete, '...');
  cxSetResourceString(@cxSMenuItemCaptionLoad,   '...');
  cxSetResourceString(@cxSMenuItemCaptionSave,   '...');
  // ...

end.

字符串

相关问题