gpt4 book ai didi

Delphi:如何本地化菜单快捷方式的描述?

转载 作者:行者123 更新时间:2023-12-03 15:01:39 25 4
gpt4 key购买 nike

有没有办法获取 Ctrl+Z 等快捷方式的本地化描述,以便我得到“Ctrl+ Z”(如果应用程序在英语系统上运行)和“Strg+Z”(在德语系统上运行)?

VCL 函数 ShortCutToText 未国际化。 API 函数 GetKeyNameText 稍好一些,但仍然不完美:如果将德语 XP 的区域设置切换为英语(美国),它仍然会生成德语文本。此外,结果都是大写的,这很丑。

说明:我知道如何用自定义版本替换 ShortCutToText 或 Smkc* 资源字符串。但要使用它,我需要翻译后的字符串。我想从操作系统(或类似的操作系统)获取这些。

更新:看起来 Microsoft 希望开发人员自行进行翻译 - 请参阅 Associating a Menu Item with an Accelerator Key 中的 2. 。引用:

For example, to assign CTRL+O to the Open command on the File menu, you modify the menu item’s caption so that it looks like this:

Open\tCtrl+O

The menu item in the Menu editor is updated to reflect the new caption as you type it.

请注意,快捷方式是手动附加到标题中的。

最佳答案

ShortCutToText 使用 MenuKeyCaps 数组。这不能直接修改(因为它是在菜单单元的实现中),但是该数组填充了可以使用各种翻译工具进行翻译的资源字符串

您需要翻译 SmkcCtrl 资源字符串常量,该常量位于 consts.pas 中(取决于您的 Delphi 版本)。

[编辑]

或者您可以下载BigProcHook.pas ,我也创建了 Hook 函数并将其替换为您自己的函数。然后,您可以编写一个重写,调用常规 ShortCutToText 函数,并将文本“Ctrl”替换为“Strg”(反之亦然),而菜单甚至不知道这一点。但我只会将此作为最后的手段,因为我认为最好只翻译资源。如果您想使用该 Hook ,请下载并包含该单元,然后在任何单元中添加以下代码(如果您愿意,可以添加一个单独的新单元)。

uses
BigProcHook, Menus;

var
FHook: TBigProcHook;

// The replacement function
function MyShortCutToText(ShortCut: TShortCut): string;
begin
FHook.Hooked := False;
try
Result := ShortCutToText(ShortCut);
Result := StringReplace(Result, 'Ctrl', 'Whatever', []);
finally
FHook.Hooked := True;
end;
end;

initialization
FHook := TBigProcHook.Create(@ShortCutToText, @MyShortCutToText);
finalization
FHook.Hooked := False;
FHook.Free;
end.

它将用您喜欢的任何文本替换快捷方式文本中的 Ctrl,而无需更改任何其他代码。

关于Delphi:如何本地化菜单快捷方式的描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4604651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com