把中文菜单中的(Y)去掉的方法(在工具栏按钮中中设置AutoHotkey=maManual是没用的!)(1分)

  • 主题发起人 主题发起人 kindly
  • 开始时间 开始时间
K

kindly

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi5 的菜单有个很讨厌的问题,会自动帮你的中文菜单加上(Y)之类的东西,如果失主菜单
可以设资Autohotkey=maManual,但是如果是在工具条按钮中的MenuItem中设置是无论如何也不行的
我改了一下源程序,刚刚搞出来的:)
打开menus.pas
查找下面的程序段
procedure InsertHotkeyFarEastFormat(var ACaption: string; const AHotKey: string; AColumn: Integer);
var
I: Integer;
vMBCSFlag: Boolean;
begin
vMBCSFlag := False;
for I := 1 to Length(ACaption) do
if ACaption in LeadBytes then
begin
vMBCSFlag := True;
System.Break;
end;
if vMBCSFlag then
begin
if Copy(ACaption, (Length(ACaption) - Length(cDialogSuffix)) + 1, Length(cDialogSuffix)) = cDialogSuffix then
ACaption := Copy(ACaption, 1, Length(ACaption) - Length(cDialogSuffix)) +
'(' + cHotkeyPrefix + AHotKey + ')' + cDialogSuffix
else
// ACaption := ACaption + '(' + cHotkeyPrefix + AHotKey + ')';
把这一句注释掉,删掉原有的menus.duc,重新编译menus.pas就行了
end
else if AColumn <> 0 then
System.Insert(cHotkeyPrefix, ACaption, AColumn);
end;
 
高手!!
 
不会吧 我以前 怎么没发现???[:(]
 
有,我碰到过。
 
究其原因,其实在工具栏上出现这种情况,是这段代码造成的,为此只需加一行代码足矣

function TToolBar.CheckMenuDropdown(Button: TToolButton): Boolean;
var
Hook: Boolean;
Menu: TMenu;
Item: TMenuItem;
I: Integer;
ParentMenu: TMenu;
APoint: TPoint;
begin
Result := False;
if Button = nil then Exit;
FCaptureChangeCancels := False;
try
if Button.DropdownMenu <> nil then
FTempMenu := Button.DropdownMenu
else if Button.MenuItem <> nil then
begin
Button.MenuItem.Click;
ClearTempMenu;
FTempMenu := TPopupMenu.Create(Self);
FTempMenu.AutoHotkeys := maManual; //只须加这一行代码就可以了(这行代码是我加上的)
ParentMenu := Button.MenuItem.GetParentMenu;
if ParentMenu <> nil then
FTempMenu.BiDiMode := ParentMenu.BiDiMode;
FTempMenu.HelpContext := Button.MenuItem.HelpContext;
FTempMenu.TrackButton := tbLeftButton;
Menu := Button.MenuItem.GetParentMenu;
if Menu <> nil then
FTempMenu.Images := Menu.Images;
FButtonMenu := Button.MenuItem;
for I := FButtonMenu.Count - 1 downto 0 do
begin
Item := FButtonMenu.Items;
FButtonMenu.Delete(I);
FTempMenu.Items.Insert(0, Item);
end;
end
else
Exit;
SendCancelMode(nil);
FTempMenu.PopupComponent := Self;
Hook := Button.Grouped or (Button.MenuItem <> nil);
if Hook then
begin
MenuButtonIndex := Button.Index;
MenuToolBar := Self;
InitToolMenuHooks;
end;
Perform(TB_SETHOTITEM, -1, 0);
try
APoint := Button.ClientToScreen(Point(0, Button.ClientHeight));
if FTempMenu.IsRightToLeft then Inc(APoint.X, Button.Width);
FMenuDropped := True;
if GetComCtlVersion = ComCtlVersionIE5 then
Button.Invalidate;
FTempMenu.Popup(APoint.X, APoint.Y);
finally
if Hook then ReleaseToolMenuHooks;
end;
FMenuButton := Button;
if StillModal then
Perform(TB_SETHOTITEM, Button.Index, 0);
Result := True;
finally
PostMessage(Handle, CN_DROPDOWNCLOSED, 0, 0);
end;
end;

看这一段代码,就会发现下拉菜单是重新创建的,那么菜单的AutoHotKeys也就默认为maAutomatic,
所以会出现你说的那种悄况。
 
这样也可以
 
接受答案了.
 
将 FTempMenu.AutoHotkeys := BmaManual;
换成 FTempMenu.AutoHotkeys := Button.MenuItem.AutoHotkeys;
就可以自由设置是不是自动加上hotkey了。
 
后退
顶部