Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ] > Код на шару!
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.12.2012, 23:52
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию компонент

Добрый вечер не поможете превратить мой код в компонент ?

Код:
unit WMHotKey;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    id1, id2, id3, id4: Integer;
     procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }


 // Trap Hotkey Messages (принимаем сообщене хоткей, и обрабатываем)
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
   if Msg.HotKey = id1 then
     ShowMessage('Ctrl + A pressed !');
   if Msg.HotKey = id2 then
     ShowMessage('Ctrl + Alt + R pressed !');
   if Msg.HotKey = id3 then
     ShowMessage('Win + F4 pressed !');
   if Msg.HotKey = id4 then
     ShowMessage('Print Screen pressed !');
end;

procedure TForm1.FormCreate(Sender: TObject);
// Different (различные) Constants (константы) from (с модуля) Windows.pas

 const
   MOD_ALT = 1;
   MOD_CONTROL = 2;
   MOD_SHIFT = 4;
   MOD_WIN = 8;
   VK_A = $41;
   VK_R = $52;
   VK_F4 = $73;
begin
  // Register Hotkey Ctrl + A 
  id1 := GlobalAddAtom('Hotkey1');
   RegisterHotKey(Handle, id1, MOD_CONTROL, VK_A);
 
   // Register Hotkey Ctrl + Alt + R 
  id2 := GlobalAddAtom('Hotkey2');
   RegisterHotKey(Handle, id2, MOD_CONTROL + MOD_Alt, VK_R);
 
   // Register Hotkey Win + F4 
  id3 := GlobalAddAtom('Hotkey3');
   RegisterHotKey(Handle, id3, MOD_WIN, VK_F4);
 
   // Globally trap the Windows system key "PrintScreen" 
  id4 := GlobalAddAtom('Hotkey4');
   RegisterHotKey(Handle, id4, 0, VK_SNAPSHOT);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   UnRegisterHotKey(Handle, id1);
   GlobalDeleteAtom(id1);
   UnRegisterHotKey(Handle, id2);
   GlobalDeleteAtom(id2);
   UnRegisterHotKey(Handle, id3);
   GlobalDeleteAtom(id3);
   UnRegisterHotKey(Handle, id4);
   GlobalDeleteAtom(id4);
end;

end.
Ответить с цитированием
  #2  
Старый 16.12.2012, 23:57
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gudzik11
Добрый вечер не поможете превратить мой код в компонент ?
А что не получается?
Меню -> Component -> New Component
Ancestor type: TComponent
Class Name: TMySuperPuperComponent
...
Ответить с цитированием
  #3  
Старый 17.12.2012, 03:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Gudzik11, извини не заметил, что тема в разделе "Код на шару!".
Вот тебе полностью рабочий компонент:
Код:
unit HotKeyComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Dialogs;

type
  THotKeyComponent = class(TComponent)
  private
    id1, id2, id3, id4: Integer;
    FWnd: HWND;
    procedure WndProc(var Msg: TMessage);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [THotKeyComponent]);
end;

{ THotKeyComponent }

constructor THotKeyComponent.Create(AOwner: TComponent);
// Different (различные) Constants (константы) from (с модуля) Windows.pas
const
  MOD_ALT = 1;
  MOD_CONTROL = 2;
  MOD_SHIFT = 4;
  MOD_WIN = 8;
  VK_A = $41;
  VK_R = $52;
  VK_F4 = $73;
begin
  inherited;

  if not (csDesigning in ComponentState) then
  begin
    FWnd := AllocateHWnd(WndProc);

    // Register Hotkey Ctrl + A
    id1 := GlobalAddAtom('Hotkey1');
    RegisterHotKey(FWnd, id1, MOD_CONTROL, VK_A);

    // Register Hotkey Ctrl + Alt + R
    id2 := GlobalAddAtom('Hotkey2');
    RegisterHotKey(FWnd, id2, MOD_CONTROL + MOD_Alt, VK_R);

    // Register Hotkey Win + F4
    id3 := GlobalAddAtom('Hotkey3');
    RegisterHotKey(FWnd, id3, MOD_WIN, VK_F4);

    // Globally trap the Windows system key "PrintScreen"
    id4 := GlobalAddAtom('Hotkey4');
    RegisterHotKey(FWnd, id4, 0, VK_SNAPSHOT);
  end;
end;

destructor THotKeyComponent.Destroy;
begin
  if not (csDesigning in ComponentState) then
  begin
    UnRegisterHotKey(FWnd, id1);
    GlobalDeleteAtom(id1);
    UnRegisterHotKey(FWnd, id2);
    GlobalDeleteAtom(id2);
    UnRegisterHotKey(FWnd, id3);
    GlobalDeleteAtom(id3);
    UnRegisterHotKey(FWnd, id4);
    GlobalDeleteAtom(id4);

    DeallocateHWnd(FWnd);
  end;

  inherited;
end;

procedure THotKeyComponent.WndProc(var Msg: TMessage);
var
  WMHotKey: TWMHotKey absolute Msg;
begin
  case Msg.Msg of
    WM_HOTKEY:
      begin
        if WMHotKey.HotKey = id1 then
          ShowMessage('Ctrl + A pressed !');
        if WMHotKey.HotKey = id2 then
          ShowMessage('Ctrl + Alt + R pressed !');
        if WMHotKey.HotKey = id3 then
          ShowMessage('Win + F4 pressed !');
        if WMHotKey.HotKey = id4 then
          ShowMessage('Print Screen pressed !');
      end;
  else
    DefWindowProc(FWnd, Msg.Msg, Msg.WParam, Msg.LParam);
  end;
end;

end.
Ответить с цитированием
  #4  
Старый 30.12.2012, 22:04
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Спасибо ! Вот тут нашёл уже готовый компонент HotKeyManager
офф сайт http://subsimple.com/delphi.asp
только не как не могу понять как мне зарегистрировать какую не будь клавишу .
Может подскажете как это сделать ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter