Советы по Delphi

         

Клавиши-акселераторы для TPageControl


Тема: Создание акселераторов, работающих с TPageControl

TPageControl, расположенный на закладке Win95 палитры компонентов, в настоящий момент не может работать с акселераторами. Тем не менее, в наших силах создать потомок TPageControl, поддерживающий вышеназванную характеристику.

В приведенном ниже коде показана реализация такого компонента. Наследник TPageControl осуществляет захват и обработку сообщения CM_DIALOGCHAR. Это позволяет перехватывать комбинации клавиш, которые могут быть акселератороми для данной формы. Обработчик события CMDialogChar использует функцию IsAccel, которая позволяет определить, имеет ли отношение перехваченный код клавиш к акселератору одной из страниц TPageControl. В этом случае делаем страницу активной и передаем ей фокус.

    unit tapage;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;
type
TAPageControl = class(TPageControl) private procedure CMDialogChar(var Msg: TCMDialogChar); message CM_DIALOGCHAR; end;
procedure Register;
implementation
procedure
TAPageControl.CMDialogChar(var Msg: TCMDialogChar); var i: Integer; S: String; begin if Enabled then for I := 0 to PageCount - 1 do if IsAccel(Msg.CharCode, Pages[i].Caption) and Pages[I].TabVisible then begin Msg.Result := 1; ActivePage := Pages[I]; Change; Exit; // выход из цикла. end; inherited; end;
procedure Register; begin RegisterComponents('Test', [TAPageControl]); end;
end.

[001028]



Содержание раздела