喫茶XRAYトップページ

[スレッド全体
]

[6329] Re6:今度はグローバルフックに返信 削除
2012/9/7 (金) 21:00:10 Mr.XRAY
▼ Takiさん

> PostMessageはポストに手紙を投函するだけなのでさっさと帰れますが、
> Sendmessageは相手の家まで手紙を届けないといけないのでなかなか
> 帰って来れません。


おおっ! これは使えるフレーズですね.
これから,もし,PostMessage と SendMessage の説明が必要な場面が
あったら使わせていただきます.

Halbow さんのコードをよく見てみると,PostMessage で受ける部分と,
その処理の部分を別のプロシージャーにしています.
こんなのも,ちょっとした「ノウハウ」なんじゃないかと思います.
単なる tips だけでは説明しにくい部分ですね.

ワード,エクセル操作フォームExでは,受けた処理が追いつかない
場合は,フラグを使って処理しています.

[6330] Re7:今度はグローバルフックに返信 削除
2012/9/8 (土) 11:36:16 Taki
▼ マスター 報告です。

マスターのサンプルプログラム 260_グローバルフック(キー・マウス)より
03_WH_MOUSE_LLとWH_KEYBORD_LLをいじってみました。

DLLを使用しないで済むのが良いのと、マウスフックのコールバック関数の
PostMessageをSendMessageに変えたらどんなおもしろいことがあるのかなと
興味がでまして・・・。

それと、フックしたマウス情報を受け取る関数 TForm1.WMApp100に
sleepも入れてみました。

LButtonDownでは両方ともWindowのキャプションはメモ帳でしたが、
LButtonUpでは違う結果になりました。(^_^)v

[6331] マスター 質問です。返信 削除
2012/9/8 (土) 23:15:03 Taki
▼ マスター 度々ですみませんが質問です。

報告で使った低レベルのマウスフックとキーフックのサンプルですが、
マウスフックやキーフックのコールバック関数内に直接操作内容をListViewに
表示するコードは書いてはいけないのでしょうか。

DLLを使ってないので自分から自分にメッセージを送る事が?です。

メッセージを留めないという意味ではこうするべきなのかもしれませんが。

[6332] Re:マスター 質問です。返信 削除
2012/9/8 (土) 23:41:41 Mr.XRAY
▼ Takiさん,どうもどうも,留守にしていたもんで.

> マウスフックやキーフックのコールバック関数内に直接操作内容をListViewに
> 表示するコードは書いてはいけないのでしょうか。


> DLLを使ってないので自分から自分にメッセージを送る事が?です。

全く問題ありませんです.ハイ.
表示そのものに時間がかかりますが,受け取れなかった分は表示できない
だけです,でも,人のキー操作の速度より,TListViewの描画の方が
はるかに速いハズです.通常のディスプレイ画面に表示する領域ぐらいは
問題ないと思います.何万行も表示するディスプレイだと問題あるかも?

それに,メッセージはキューに格納されて,順番に取り出されますから,
もし,メッセージの処理が追いつかないのであれば,操作終了後,
TListView にはキュー内のメッセージがなくなるまで表示続けることに
なります.強制的にキューに溜まったメッセージを削除すれば別ですが.

[キーバッファ等のクリア例]
http://mrxray.on.coocan.jp/Delphi/plSamples/840_CancellLockDisable.htm#08
この例はあまりよくないです.
実際には,KEY_FIRST,KEY_LAST というのを使った方が,よりベターてす.


[6333] ゴメンなさい.間違えました返信 削除
2012/9/9 (日) 00:02:23 Mr.XRAY
わわっ,スミマセン.間違えました.

>マウスフックやキーフックのコールバック関数内に直接操作内容をListViewに

コールバック関数内に書く,というのはやめた方がいいです.
問題あります.
必ずPostMesssge で送信して,このメッセージを憂げ取る
プロシージャーを作成して,処理してください.
やってもかまいませんが,動作は保証できません.

よく読まないでゴメンなさい.

[6334] Re:ゴメンなさい.間違えました返信 削除
2012/9/9 (日) 11:25:41 Taki
▼ マスター お世話になります。

> わわっ,スミマセン.間違えました.
>
> コールバック関数内に書く,というのはやめた方がいいです.
> 問題あります.


了解しました。

コールバック関数はあちら(Windows)の世界で呼び出される関数だから
こちらの世界のListViewに直結するコードは書かない方がいいのでしょうか。

メッセージを使ってスレッド間のデータの受け渡しをするのが安全なの
かなと推測(納得)します。

マスターがオーダーを間違ってあわてているのを見てしまいました。(^c^)

[6335] Re2:ゴメンなさい.間違えました返信 削除
2012/9/9 (日) 13:44:41 Mr.XRAY
▼ Takiさん

> コールバック関数はあちら(Windows)の世界で呼び出される関数だから
> こちらの世界のListViewに直結するコードは書かない方がいいのでしょうか。


そういうことだと思います.

> メッセージを使ってスレッド間のデータの受け渡しをするのが安全なの
> かなと推測(納得)します。


ですね.
 
> マスターがオーダーを間違ってあわてているのを見てしまいました。(^c^)

ハハハッ.
誤字脱字のMr.XRAYが,誤字脱字に「誤読」が含まれてしまいました.
まっ,今に始まったことじゃないですけどね.

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