TLabel displays accelerator keys even when the UI state says not to

后端 未结 3 617
故里飘歌
故里飘歌 2021-02-09 09:35

With default Windows settings, accelerator keys are not meant to be shown on dialogs until the user presses the ALT key.

Delphi\'s TLabel control

3条回答
  •  遥遥无期
    2021-02-09 10:21

    Sorry no code, but maybe a solution direction.

    I see TWinControl using NotifyControls to BroadCast a message to all contained controls. It is used to notify controls of changes in the Parent* properties, for example

    procedure TWinControl.CMShowHintChanged(var Message: TMessage);
    begin
      inherited;
      NotifyControls(CM_PARENTSHOWHINTCHANGED);
    end;
    

    I guess what you could do is code a message handler on your form to get the WM_CHANGEUITSTATE and pass it on to all controls parented by the form, using either NotifyControls, or something similar that only passes it to containers and TLabels.

    You then still need a way to have your TLabel's' react to that message. I guess (haven't looked into it) that you could either override (descendant or interceptor) the WndProc method and/or do something with FDefWndProc (protected property).

    And you will have to cater for frames in forms in ...

提交回复
热议问题