如何转义加速器字符?
How to escape the accelerator characters?
我正在将一些字符串设置为 TLabel
控件的 Caption
属性 的值。
我从外部接收这些值,有时它们包含 '&'
键,该键被解释为快捷键。
例如:
var
NewCaption : string;
begin
NewCaption := 'B&B';
MyLabel.Caption := MyNewCaption;
end;
在运行时,显示为'BB'
,第二个字母加下划线:
我想改为显示 'B&B'
。
我知道 Vcl.Menus.StripHotkey
删除加速字符标记的功能...
function StripHotkey(const Text: string): string;
var
I: Integer;
begin
Result := Text;
I := 1;
while I <= Length(Result) do
begin
{$IF NOT DEFINED(CLR)}
if IsLeadChar(Result[I]) then
Inc(I)
else
{$ENDIF}
if Result[I] = cHotkeyPrefix then
if SysLocale.FarEast and
((I > 1) and (Length(Result)-I >= 2) and
(Result[I-1] = '(') and (Result[I+2] = ')')) then
Delete(Result, I-1, 4)
else
Delete(Result, I, 1);
Inc(I);
end;
end;
...但我不知道转义加速器字符的任何特定函数,以便它在 Caption
中显示为原始字符串 ('B&B'
).
我找到的唯一方法是简单地将 '&'
字符加倍,但没有找到用于此目的的任何特定函数:
uses
System.SysUtils, Vcl.Menus;
...
var
NewCaption : string;
begin
NewCaption := 'B&B';
MyLabel.Caption := StringReplace(MyNewCaption, cHotkeyPrefix, cHotkeyPrefix + cHotkeyPrefix, [rfReplaceAll]);
end;
想知道有没有更好的方案
为了不在 TLabel 上显示加速器字符,您只需将其 ShowAccelChar 属性 设置为 False
。
编辑:TStaticText 组件也是如此。
我正在将一些字符串设置为 TLabel
控件的 Caption
属性 的值。
我从外部接收这些值,有时它们包含 '&'
键,该键被解释为快捷键。
例如:
var
NewCaption : string;
begin
NewCaption := 'B&B';
MyLabel.Caption := MyNewCaption;
end;
在运行时,显示为'BB'
,第二个字母加下划线:
我想改为显示 'B&B'
。
我知道 Vcl.Menus.StripHotkey
删除加速字符标记的功能...
function StripHotkey(const Text: string): string;
var
I: Integer;
begin
Result := Text;
I := 1;
while I <= Length(Result) do
begin
{$IF NOT DEFINED(CLR)}
if IsLeadChar(Result[I]) then
Inc(I)
else
{$ENDIF}
if Result[I] = cHotkeyPrefix then
if SysLocale.FarEast and
((I > 1) and (Length(Result)-I >= 2) and
(Result[I-1] = '(') and (Result[I+2] = ')')) then
Delete(Result, I-1, 4)
else
Delete(Result, I, 1);
Inc(I);
end;
end;
...但我不知道转义加速器字符的任何特定函数,以便它在 Caption
中显示为原始字符串 ('B&B'
).
我找到的唯一方法是简单地将 '&'
字符加倍,但没有找到用于此目的的任何特定函数:
uses
System.SysUtils, Vcl.Menus;
...
var
NewCaption : string;
begin
NewCaption := 'B&B';
MyLabel.Caption := StringReplace(MyNewCaption, cHotkeyPrefix, cHotkeyPrefix + cHotkeyPrefix, [rfReplaceAll]);
end;
想知道有没有更好的方案
为了不在 TLabel 上显示加速器字符,您只需将其 ShowAccelChar 属性 设置为 False
。
编辑:TStaticText 组件也是如此。