![]() |
|
|
|
|
#1
|
|||
|
|||
|
Добрый вечер не поможете превратить мой код в компонент ?
Код:
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
|
||||
|
||||
|
Цитата:
Меню -> Component -> New Component Ancestor type: TComponent Class Name: TMySuperPuperComponent ... |
|
#3
|
||||
|
||||
|
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
|
|||
|
|||
|
Спасибо ! Вот тут нашёл уже готовый компонент HotKeyManager
офф сайт http://subsimple.com/delphi.asp только не как не могу понять как мне зарегистрировать какую не будь клавишу . Может подскажете как это сделать ? |