使用CompareText()和AdvPopupMenu

问题描述 投票:0回答:1

我正在将C ++ Builder 10.3和用于Windows的VCL应用程序一起使用。我试图通过遍历Items Caption并使用CompareText()将Caption与我的搜索文本进行比较来识别AdvPopupMenu中的特定项目。字幕在字幕文本中带有一个“&”,我认为这是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; 

下面是我搜索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工作?

delphi c++builder
1个回答
3
投票

&很重要。没有这些,像我这样的键盘用户将发现您的应用程序更难以使用。

[我认为您最好的解决方案是在将标题传递给StripHotkey之前,使用Vcl.Menus单元中的CompareText函数删除与号字符。 (此外,最好不要使用CompareText函数来测试0是否返回SameText。)

也就是说,请勿尝试创建没有&符号的菜单项,也不要尝试将其从菜单项中删除。仅从传递给比较函数的字符串中删除字符。


还请注意,与号字符与ShortCut属性无关。 “&”字符使菜单项标题中的下一个字符带有下划线,告诉用户可以按该键激活菜单项,但仅当菜单打开时。另一方面,ShortCut属性在菜单项中添加了一个右对齐的文本,例如Ctrl+AShift+Ctrl+NF2,即使菜单未打开,这些快捷方式仍然可用。因此,这些是不同的功能。

© www.soinside.com 2019 - 2024. All rights reserved.