Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка клавиш-акселераторов для станиц TPageControl

Delphi , Компоненты и Классы , Вкладки и Страницы

Обработка клавиш-акселераторов для станиц TPageControl

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  With menus (and labels), If you use the '&' character in the caption of a menu, 
  you can access that menu item with the short cut key. 
  With this code you can do the same thing with TTabSheet objects 
  that are used with TPageControl objects. 

  Zugriffstasten ermoglichen die Ausfuhrung eines Menubefehls mit Hilfe der Tastatur. 
  Der Benutzer braucht nur die Taste Alt und den mit dem Zeichen & kombinierten 
  Buchstaben zu drucken. 

  Dieser code erlaubt dieselebe Funktionalitat fur ein 
  TTabSheet eines TPageControls. 
}

 // in form declaration 
private
   procedure CMDialogChar(var Msg: TWMCHAR); message CM_DIALOGCHAR;
 end;

    type
   TPageControlCracker = class(TPageControl);

 {...}

 implementation

   procedure TForm1.CMDialogChar(var Msg: TWMCHAR);
   var
     i: Integer;
   begin
     if (Msg.keydata and $20000000) <> 0 then
     begin
       { Alt key is down }
       with TPageControlCracker(PageControl1) do
         for i := 0 to PageCount - 1 do
         begin
           if IsAccel(Msg.charcode, Pages[i].Caption) then
           begin
             if CanChange then
             begin
               ActivePage := Pages[i];
               Msg.Result := 1;
               Change;
               Exit;
             end; { If }
           end;  { If }
         end; {For}
     end; {If}
     inherited;
   end;

Программный класс TPageControlCracker, который наследуется от TPageControl. Он переопределяет процедуру CMDialogChar для включения ускоренных клавиш для вкладок в TPageControl.

Работает следующим образом:

  1. Процедура CMDialogChar вызывается каждый раз, когда пользователь нажимает на ускоренную клавишу (например, Alt+X). Эта процедура проверяет, является ли клавиша Alt нажатой, проверяя свойство keydata сообщения TWMCHAR.
  2. Если клавиша Alt нажата, код проходит через все страницы в TPageControlCracker и проверяет, соответствует ли нажатая клавиша любому ускоренному клавишу, определенным в заголовке страницы (используя функцию IsAccel).
  3. Если соответствие найдено, код проверяет, может ли быть изменена страница (используя свойство CanChange). Если может, он устанавливает активную страницу в соответствующую страницу, отправляет сообщение WM_CHANGEUISTATE, чтобы вызвать изменение страницы, и возвращает результат 1.
  4. Заявление inherited в конце обеспечивает выполнение любого дальнейшего процесса, требуемого базовой классом.

Альтернативное решение:

Вместо переопределения процедуры CMDialogChar, можно использовать свойство Accelerators для определения ускоренных клавиш для каждой страницы. Это позволит отделить обработку ускоренных клавиш от самого контроля страниц.

Например:

procedure TForm1.FormCreate(Sender: TObject);
begin
  PageControl1.Accelerators := TStringList.Create;
  with PageControl1.Accelerators do begin
    Add('X', 'Page1');
    Add('Y', 'Page2');
    Add('Z', 'Page3');
  end;
end;

procedure TForm1.CMDialogChar(var Msg: TWMCHAR);
begin
  if (Msg.keydata and $20000000) <> 0 then begin
    with PageControl1 do begin
      for i := 0 to PageCount - 1 do begin
        if IsAccel(Msg.charcode, Pages[i].Caption) then begin
          ActivePage := Pages[i];
          Msg.Result := 1;
          Change;
          Exit;
        end;
      end;
    end;
  end;
end;

В этом примере ускоренные клавишы определяются в процедуре FormCreate с помощью свойства Accelerators. Процедура CMDialogChar затем проверяет, была ли нажата ускоренная клавиша, и изменяет соответствующую страницу, если соответствие найдено.

Обратите внимание, что вам нужно будет адаптировать код к вашим конкретным требованиям.

Обработка клавиш-акселераторов для станиц TPageControl позволяет пользователю вызывать соответствующую страницу с помощью комбинации клавиши Alt и символа, указанного в заголовке страницы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Вкладки и Страницы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-11-30 11:42:55
2024-12-21 15:16:47/0.0025079250335693/0