Приклеить процедуру к объекту

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
maelz
Сообщения: 47
Зарегистрирован: 10 сен 2005, 18:45

Глупая, но довольно едкая задача встала :)
В общем есть объект TWebBrowser, он есть на динамически создаваемой форме. Фокус при клике на компонент активизируется.
Но трабл в том, что мне нужно закрыть форму нажатием клавиши Esc, а в прописанных по умолчании событиях TWebBrowser нет обычного OnKeyDown :(
ну в том и вопрос, как объявить это событие компоненту???
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Таки перехватывай события нажатия на Esc и при определенных твоих условиях что-то делай..
maelz
Сообщения: 47
Зарегистрирован: 10 сен 2005, 18:45

А как????!!!!!
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Ну можно зафигарить как горячую клавишу в системе, будет пахать даже при свернутом состоянии, примерно так:

Код: Выделить всё

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
const
  MyHotKey = VK_ESCAPE;
        // Virtual-Key Codes
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  ShowMessage('esc');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RegisterHotKey(Form1.Handle, MyHotKey, 0, MyHotKey);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnRegisterHotKey(Form1.Handle, MyHotKey);
end;

end.
Вариация для приложения использовать компонент TApplicationEvents

Код: Выделить всё

procedure Tmain_form.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  VK: Cardinal;
begin     
  if Msg.Message = WM_KEYDOWN then begin VK := Msg.wParam;
       if Key=VK_ESCAPE then begin 
Ну есть еще способы, придумай сам, успеха. :D
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

maelz, как вариант породить наследника от TWebBrowser, добавить в него нужное событие... покурить исходники VCL как сделано там
Изображение
Ответить