▼ OK牧場さん
> TEditのヘルプを見て下さい.このプロパティにWindowProcというのがあります.
> これで,TEditがメッセージを処理する関数を指定しています.この関数の処理
ということなので,以下のコードの方がわかりやすいかも知れません.
これなら,Edit1SubClassProcはクラスメソッドとなりますので,
EditFlag,OriginalProcをクラス変数(Private等の)にできます.
EditFlagは,必要な処理をこのメソッド内で行えば不要でしょう.
var
EditFlag: Boolean;
OriginalProc: TWndMethod;
//====================================================================
// Edit1のサブクラス化関数
//====================================================================
procedure TForm1.Edit1SubClassProc(var Message: TMessage);
begin
OriginalProc(Message);
case Message.Msg of
WM_SETTEXT:
begin
EditFlag:=False;
Panel1.Caption:='WM_SETTEXT';
//他からEditに文字列が入力された時の処理
end;
WM_KEYDOWN:
begin
EditFlag:=True;
Panel1.Caption:='KeyDown';
//Edit1にキーボードからタイプした時の処理
end;
end;
end;
//====================================================================
// 送る側でEdit1を判定しやすい様にID=1000とする
//====================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle,GWL_ID,1000);
//Edit1のサブクラス化
OriginalProc:=Edit1.WindowProc;
Edit1.WindowProc:=Edit1SubClassProc;
end;
end.
|