名前 題名 ▼ Mr.XRAYさん > ▼ OK牧場さん > > > postmessageで2回(2文字)送信すると2回showmessageがでたので > > 自分の考えてる判別方法だとうまくいきませんでした。 > > う〜む,そうですか. > 目的の動作を実現する方法は,いつくか考えられますが.これはやはりEdit1 > のサプクラス化が早いかも知れません. > > (1)送る側のアプリ > TForm2でTButtonが一つ(Button1) > > //==================================================================== > // 文字列を送る側のButton1のクリックイベント > // 受取る側のEdit1は判断しやすいようにID値を1000にしてある > //==================================================================== > procedure TForm2.Button1Click(Sender: TObject); > var > hWindow : HWND; > EditHandle : HWND; > GetText : PChar; > SendText : String; > begin > //まず目的のEdit1があるTForm1のウィンドウハンドルを取得 > //次にそのウィンドウ内のIDが1000のコントロールのハンドルを取得 > //そこにWM_SETTEXTで文字列を送る > //ここでは既に入力済みの文字列を取得しているが > //受取った側で処理する方法も考えられる > hWindow:=FindWindow('TForm1',nil); > if hWindow<>0 then begin > EditHandle:=GetDlgItem(hWindow,1000); > SendMessage(EditHandle,WM_GETTEXT,256,LPARAM(GetText)); > SendText:=GetText+'567'; > SendMessage(EditHandle,WM_SETTEXT,0,LPARAM(PChar(SendText))); > end; > end; > > > (2)受取る側のアプリ > TForm1でTEditを一つ配置(Edit1) > > var > EditFlag: Boolean; > OriginalProc: Pointer; > > //==================================================================== > // Edit1のサブクラス化関数 > //==================================================================== > function Edit1Proc(AWnd: HWND; uMsg: UINT; wParam:WPARAM; > lParam: LPARAM):LRESULT; stdcall; > begin > case uMsg of > WM_SETTEXT: > begin > EditFlag:=False; > //他からEditに文字列が入力された時の処理 > end; > WM_KEYDOWN: > begin > EditFlag:=True; > //Edit1にキーボードからタイプした時の処理 > //もちろんOnKeyPress,OnKeyDownに書いてもよい > end; > end; > > //通常の処理を継続 > Result:=CallWindowProc(OriginalProc,AWnd,uMsg,wParam,lParam); > end; > //==================================================================== > // 送る側でEdit1を判定しやすい様にID=1000とする > //==================================================================== > procedure TForm1.FormCreate(Sender: TObject); > begin > SetWindowLong(Edit1.Handle,GWL_ID,1000); > //Edit1のサブクラス化 > OriginalProc:=Pointer(SetWindowLong(Edit1.Handle,GWL_WNDPROC, > LongInt(Addr(Edit1Proc)))); > end; > > end. > > サブクラス化というのは,ここではEdit1に対してですが. > TEditのヘルプを見て下さい.このプロパティにWindowProcというのがあります. > これで,TEditがメッセージを処理する関数を指定しています.この関数の処理 > 内容を変更する,つまり関数のサブ関数という意味で「サブクラス」といっています. > (または元のEdit1の(とは違う)サブクラスの動作仕様という意味) > (これはコールバック(呼び戻し)関数と言われるものの仲間でもあります) > > このサプクラス関数の名前は任意ですが,引数の型と順序は指定されています. > このサブクラス関数の中で,Edit1のメッセージを処理しようというわけです. > 詳しい説明は,Halbow資料館などにもありますで,後で調べて下さい. > > 取敢えず,上記のコードの動作が目的の動作を実現するために利用可能だけを > 確認して下さい. > > もしかしたら,未知の世界のコードや命令があると思いますが,いつかは > 通らなければならない道です.頑張って下さい. GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link