喫茶XRAYトップページ

[スレッド全体
]

[483] Re5:PostMessageと手打ち(タイピング)の見分け方返信 削除
2005/10/31 (月) 19:35:40 Mr.XRAY
▼ 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.

[484] Re6:PostMessageと手打ち(タイピング)の見分け方 (解決)返信 削除
2005/10/31 (月) 22:22:52 OK牧場
わざわざ2種類ものソースありがとうございます。
こちらのサンプル集でサブクラス化を勉強させていただいてたのに
知識としてあっても使うときに出てこなかった・・。
ウィンドウメッセージとあわせて使うのうまいです。
あらためてソースをみると、なるほど納得です。
単語を知ってても話ができない英語みたい・・。
ソースを読むだけじゃなくて書く機会をふやさねば。
今回はありがとございました。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82