2010-11-08 4 views
1

Я использую delphi 2009 и создал всплывающее меню.Странное всплывающее меню проблема

object PopupMenu1: TPopupMenu 
    object lmm1: TMenuItem 
    Caption = 'lm/m'#178 
    end 
end 

как только у меня есть «²» в всплывающем меню, это будет выглядеть как «лм/м² (L)». использование maManual для AutoHotKeys не помогает ... все равно выглядит так же. это как горячие клавиши, потому что каждый пункт меню получает новый.

"лм/м (L)," "м/м (М)" "AM/м (N)" "шм/м (О)"

я должен использовать «лм/м2 «вместо« lm/m² », если я хочу, чтобы (L) ушел?

Используется на международном уровне, я бы все же ожидал, что «²» будет отображаться правильно.

Благодарим за помощь!

+3

Не уверен, так как я просмотрел menus.pas из D2007, но похоже, что VCL будет спутать '²' с [ведущим байтом] (http://docwiki.embarcadero.com/VCL/en/SysUtils.LeadBytes) (вложенная процедура «InsertHotkeyFarEastFormat»). –

+1

Я думаю, что Sertac находится на правильных линиях здесь. Какой именно символ помещается в строку? Это двухбайтная строка символов, и вы указали только # 178. Я бы хотел изучить этот аспект, чтобы увидеть, что происходит. Также стоит отладить через источник, чтобы узнать, что происходит. – mj2008

+0

спасибо, ребята! Я обнаружил, что TPopupMenu.AutoHotKeys должен быть установлен в maManual. Я пробовал это с помощью самого пункта меню, но явно нужно было находиться в TPopupMenu. возможно, Сертак мог бы поставить это как ответ, чтобы он мог получить очки! –

ответ

1

вот решение я придумал после изучения/отладки источник TMenuItem.InternalRethinkHotkeys и TMenuItem.GetAutoHotkeys:

object PopupMenu1: TPopupMenu 
    Left = 184 
    Top = 272 
    object MenuItem1: TMenuItem 
    AutoHotkeys = maManual 
    Caption = 'lm/m'#178 
    end 
end 
0

Свойство AutoHotKeys относится к клавиатурным ускорителям при удерживании клавиши ALT. То, что вы видите, это свойство TMenuItem.ShortCut. Убедитесь, что он установлен на scNone для любого элемента, который вы не хотите «(#)».

+0

Благодарим вас за ответ, Реми. вы делаете много замечательной работы там, как часть TeamB - спасибо. для параметра TMenuItem.ShortCut установлено значение scNone. пытаясь выяснить, что происходит, я создал простое тестовое приложение и назвал метод PopupMenu.Popup. –

+0

Тогда вам просто нужно перейти через исходный код VCL, чтобы узнать, откуда отображается дополнительный текст. –

Смежные вопросы