Использование CompareText () и AdvPopupMenu - PullRequest
0 голосов
/ 06 апреля 2020

Я использую C ++ Builder 10.3 с приложением VCL для Windows. Я пытаюсь определить конкретный элемент c в AdvPopupMenu, просматривая заголовок «Элементы» и сравнивая заголовок с текстом поиска с помощью CompareText (). Подписи имеют текст «&» в тексте подписи, который, я считаю, является частью функции ShortCut. Это, кажется, предотвращает совпадение при сравнении текста.

Я попытался настроить пункты меню двумя способами, чтобы попытаться удалить '&'.

//--#1 Menu Setup-- 
TMenuItem *NewMenuItem;
NewMenuItem = new TMenuItem(MainForm->AdvPopupMenu1);
TShortCut sc2;
sc2 = TextToShortCut("(None)");
NewMenuItem->Caption = "Google";
NewMenuItem->ShortCut = sc2;


//--#2 Menu Setup-- 
TMenuItem *NewMenuItem;
NewMenuItem = new TMenuItem(MainForm->AdvPopupMenu1);
NewMenuItem->Caption = "Google";
NewMenuItem->ShortCut = NULL; 

Ниже приведен мой l oop для поиска элемента AdvPopupMenu.

UnicodeString SearchFor = "Google";  
UnicodeString TestCaption;

for(int i=0; i<MainForm->AdvPopupMenu1->Items->Count; i++){
  TestCaption= MainForm->AdvPopupMenu1->Items->Items[i]->Caption;

  if(CompareText(SearchFor , TestCaption)==0 ){
    //This CompareText always fails
    //TestCaption looks like this "&Google" or this "G&oogle"
  }
}

Как настроить заголовок AdvPopupMenu так, чтобы он не содержал '&', и заставить CompareText работать?

1 Ответ

3 голосов
/ 06 апреля 2020

& s важны. Без них пользователям клавиатуры, таким как я, будет труднее использовать ваше приложение.

Я думаю, что вашим лучшим решением будет использование функции StripHotkey в блоке Vcl.Menus для удаления символа амперсанда перед тем, как вы передадите подпись к CompareText. (Кроме того, вместо проверки, если CompareText возвращает 0, лучше использовать функцию SameText.)

То есть не пытайтесь создавать пункты меню без символа амперсанда, и не пытайтесь удалить его из пунктов меню. Удаляйте только символ из строки, передаваемой в функцию сравнения.


Также обратите внимание, что символ амперсанда не связан со свойством ShortCut. Символ амперсанда подчеркивает следующий символ в заголовке пункта меню, сообщая пользователю, что он или она может нажать эту клавишу, чтобы активировать пункт меню, но только при открытом меню. С другой стороны, свойство ShortCut добавляет выровненный по правому краю текст, такой как Ctrl+A или Shift+Ctrl+N или F2, к элементу меню, и эти ярлыки доступны, даже если меню не открыто. Следовательно, это разные особенности.

...