Тема: Создание акселераторов, работающих с 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]