论坛风格切换切换到宽版
  • 801阅读
  • 2回复

Inno Setup给ComboBox设置快捷键以及按下ALT组合键的声音问题 [复制链接]

上一主题 下一主题
离线xlmldh
 

发帖
15
金钱
140
威望
14
只看楼主 倒序阅读 0 发表于: 2017-04-29
因为没找到ComboBox组合框本身有提供快捷键的属性(就是要按下快捷键后使焦点置于其上),于是网上搜代码,然后自己瞎改实现了此功能,但又被按下ALT组合键时发出的“噔”的一声提示音给难住了,请大大们指点迷津。
我将ALT+G设为了组合框的快捷键,的确有效,但按下ALT+G时,总会有“噔”的一声提示音,我试了其它ALT组合键,只要是没有用处的快捷键,都是有这声音的,这应该是Windows本身的设置,不用管它。但如果是有用处的快捷键,比如ALT+N(下一步),ALT+T(示例中CheckBox本身提供的快捷键属性),都是没有声音的。
所以现在应该怎样让ALT+G这个有作用的快捷键不发出声音?
以下是示例代码:
  1. #define MyAppName "My Program"
  2. #define MyAppVersion "1.5"
  3. #define MyAppPublisher "My Company, Inc."
  4. #define MyAppURL "http://www.example.com/"
  5. #define MyAppExeName "MyProg.exe"
  6. [Setup]
  7. AppId={{BE69B2F2-3329-466D-8A56-28DBA57C8BAA}
  8. AppName={#MyAppName}
  9. AppVersion={#MyAppVersion}
  10. AppPublisher={#MyAppPublisher}
  11. AppPublisherURL={#MyAppURL}
  12. AppSupportURL={#MyAppURL}
  13. AppUpdatesURL={#MyAppURL}
  14. CreateAppDir=no
  15. DisableWelcomePage=yes
  16. Compression=lzma
  17. SolidCompression=yes
  18. [Code]
  19. var
  20.   Page: TWizardPage;
  21.   CheckBox: TNewCheckBox;
  22.   ComboBox: TNewComboBox;
  23. procedure WizardFormOnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  24. begin
  25.   if (Shift = [ssAlt]) and (key = 71) then begin
  26.     WizardForm.ActiveControl := ComboBox;
  27.   end;
  28. end;
  29. procedure InitializeWizard();
  30. begin
  31.   Page := CreateCustomPage(wpWelcome, '', '');
  32.   CheckBox := TNewCheckBox.Create(Page);
  33.   CheckBox.Caption := '测试(&T)';
  34.   CheckBox.Parent := Page.Surface;
  35.   ComboBox := TNewComboBox.Create(Page);
  36.   ComboBox.Top := CheckBox.Top + CheckBox.Height + ScaleY(8);
  37.   ComboBox.Parent := Page.Surface;
  38.   ComboBox.Style := csDropDownList;
  39.   ComboBox.Items.Add('测试1');
  40.   ComboBox.Items.Add('测试2');
  41.   WizardForm.OnKeyDown := @WizardFormOnKeyDown;
  42.   WizardForm.KeyPreview := True;
  43. end;


离线xlmldh

发帖
15
金钱
140
威望
14
只看该作者 1 发表于: 2017-04-29
问题解决了,只要将
  1. WizardForm.ActiveControl := ComboBox;
改为
  1. ComboBox.DroppedDown := True;

就行了,而且效果更好,前者只是将焦点置于其上,后者直接把下拉框拉下来了。
问题原因猜测是因为前者只是改变焦点,Windows仍认为是没有实际操作,归为无用的ALT组合键,所以有提示音。后者有了下拉框动作,所以没有声音。
看来还是发帖太早了,应该研究多点,实在解决不了再来求助。
离线xlmldh

发帖
15
金钱
140
威望
14
只看该作者 2 发表于: 2017-04-29
尴尬了,容我再啰嗦句,上面两行代码必须同时用才行。只用后面那行的话,用快捷键打开下拉框,会发现无法用方向键选择项目,因为焦点不在组合框上面。配合前一句的改变焦点,就完美了。