![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отследить мессадж WM_KeyDown при редактировании Edita
AlexR © (2004-07-16 04:10:00)Сабж. Можно ли разрешить срабатывание мессага WM_KeyDown при редактировании текста в поле Edit
Гаврила (2004-07-16 11:43:00) [1]
> TUser © (16.07.04 04:19) [1]
> Надо написать своего наследника.
В общем случае писать наследника необязательно.
Можно просто присвоить в качестве оконной процедуры указатель на свой обработчик
Ega23 (2004-07-16 10:13:00) [2]Брось на форму TApplicationEvents, в нём в OnMessage и пиши
if (msg.hwnd=Edit1.Handle) and (msg.Message=WM_KeyDown) then ....
TUser (2004-07-16 04:46:00) [3]Ну, сделай, например, так
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure MyOn(Sender:TObject);
{ Private declarations }
public
{ Public declarations }
end;
TMyEdit = class(TEdit) // TCustomEdit
private
FOnMyKeyDown:TNotifyEvent;
procedure WMKD(var Msg:TWMKeyDown); message wm_keydown;
published
property OnMyKeyDown:TNotifyEvent read FOnMyKeyDown write FOnMyKeyDown;
end;
var
Form1: TForm1;
Ed1:TMyEdit;
implementation
{$R *.dfm}
procedure TMyEdit.WMKD(var Msg:TWMKeyDown);
begin
if assigned(FOnMyKeyDown) then
FOnMyKeyDown(Self);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Ed1:=TMyEdit.Create(Application);
Ed1.top:=10;
Ed1.left:=20;
Ed1.Parent:=Self;
Ed1.OnMyKeyDown:=MyOn;
end;
procedure TForm1.MyOn(Sender:TObject);
begin
Caption:='Key downed :)';
end;
end.
Только чем тебе не угодило стандартное событияе OnKeyDown, зачем еще сообщение ловить?
AlexR (2004-07-16 04:31:00) [4]
> TUser © (16.07.04 04:19) [1]
А что дальше. Что где прописывать?
TUser (2004-07-16 04:19:00) [5]Надо написать своего наследника.