喫茶XRAYトップページ


[5307] Delphi XE2のPostMessage返信 削除
2011/9/26 (月) 01:18:34 Sara
みなさん、こんばんは

Delphi XE2で、PostMessageって正常に動作していますでしょうか?

メインフォームからサブフォームへPostMessageをしても、
サブフォーム側でメッセージを受け取らないんですよね・・・(^^;

仕方がないので、現在は、サブフォーム自身にPostMessageをさせているのですが・・・
(こちらは、正常にメッセージが届く・・・)

なにか、大いなる勘違いをしていますかね・・・(^^;


古いプロジェクトをXE2で自動変換したものでは、正常に動作しているんですが、
PageControlで表示に不具合があったので、新規プロジェクトで画面周りだけ
デザイナ上でコピペしたあとで、必要なコードをさらにコピペして、必要なイベントを
後付していったものを現在使用しているのですが、そのプロジェクトで、PostMessageが
正常に動作しないという・・・(^^;(PageControlの表示不良はなくなりましたが)

なにか、お分かりになる方がいらっしゃいましたら、御教示いただきたくm(_ _)m




[5308] Re:Delphi XE2のPostMessage返信 削除
2011/9/26 (月) 13:25:05 Mr.XRAY
▼ Saraさん

> 古いプロジェクトをXE2で自動変換したものでは、正常に動作しているんですが、

ということは,

> なにか、大いなる勘違いをしていますかね・・・(^^;

多分... (^^;
頑張ってください!!

[5309] Re2:Delphi XE2のPostMessage返信 削除
2011/9/26 (月) 21:09:22 Sara
▼ Mr.XRAYさん

> > 古いプロジェクトをXE2で自動変換したものでは、正常に動作しているんですが、
> ということは,


> > なにか、大いなる勘違いをしていますかね・・・(^^;
> 多分... (^^;


うーん・・・(^^;

確かに、PostMessageをするだけのプロジェクトを作って
PostMessageをすると、問題なく動きます・・・

基本的なことをお聞きしますがPostMessageが正常動作しない要因って何があります?

・送り先のハンドルが間違っている・・・
 PostMessageの直前に送り先をCreateFormしていまして、そのフォームは1つしか存在
 しないようにしているので、フォームソースのグローバル変数を使用しているので、
 間違っているはずがない

 念のため、送り先フォームを自動作成して試してみたが、やはりメッセージが届かない。

・メッセージが間違っている
 何度も確認したが問題ない・・・
 そもそも、送り先のフォームのOnShowイベントでPostMessageすると、正常に動作する。

・送り元と、送り先のメッセージ変数が違う値を参照している
 Grepで確認してみたが、問題ないようだ。
 念のために、固定値(例えば1537)をPostMessageと procedure xxx(var Msg : TMessage):message 1537;
 としてみたが、結果はかわらず、動作しない・・・

あと、確認すべきことってありますか?

まぁ、送り先フォームのOnShowでPostMessageすれば、動作するので、あまり困っては
いないのですが・・・できるはずのことが、できないのは気持ち悪いと言うか・・・



[5310] Re3:Delphi XE2のPostMessage返信 削除
2011/9/26 (月) 21:16:58 Mr.XRAY
> 確かに、PostMessageをするだけのプロジェクトを作って
> PostMessageをすると、問題なく動きます・・・


ということは,やはりコーディング? タイミング?
 
> 基本的なことをお聞きしますがPostMessageが正常動作しない要因って何があります?

今回の場合には当てはまらないと思いますが.
メッセージの種類によっては,SendMessageでないと動作しないとか,
PostMessageでないと動作しないとか,はありますね.
後は,今ちょっと思いつきません.

>PostMessageの直前に送り先をCreateForm

まだ,メッセージを受け取る側のウィンドウのインスタンスが生成
されていないとか?
値を送るメッセージではなく,値を受け取るメッセージをPostMessageして
いるとか? そんな訳ないか?

まっ,頑張ってくださいませ.
みんな,そうやって大きくなっていくんです.いや,廃人になっていくんです.


[5311] Re4:Delphi XE2のPostMessage返信 削除
2011/9/26 (月) 23:09:53 Sara
▼ Mr.XRAYさん

> > 確かに、PostMessageをするだけのプロジェクトを作って
> > PostMessageをすると、問題なく動きます・・・
>
> ということは,やはりコーディング? タイミング?

タイミングはありそうですが、上記はCreateした直後にPostMesasgeして
正常に動作していますが、不具合の出ている方は、CreateしてShowModalする
直前にPostMessageしています・・・
遅いと良くないとかないですよね・・・(^^;


> まだ,メッセージを受け取る側のウィンドウのインスタンスが生成
> されていないとか?

インスタンスは生成されているようです・・っていうか、
PostMessageの行でデバッガでブレークして、その後再実行しても
動作しないので・・・

> 値を送るメッセージではなく,値を受け取るメッセージをPostMessageして
> いるとか? そんな訳ないか?

そうですね・・・動作しないPostMessageの行を丸ごと、送信先フォームの
OnShowイベントにコピーすると、正常に動くので問題ないかと。

> まっ,頑張ってくださいませ.
> みんな,そうやって大きくなっていくんです.いや,廃人になっていくんです.

廃人はいやだぁ〜 orz

まぁ、今現在困っていないから、しばらく放置しよう・・・
そのうち、原因がわかる日も来るだろう・・・来るといいな・・・


そういえば、作っているプロジェクトのEXEサイズがずいぶん大きいと前に
書いていましたが、そもそも、面白がって沢山テーマを追加しているのが
原因でした・・・(^^; 12個もテーマを追加すると・・・1MB程度ふえるのね・・・(爆)


[5312] Re5:Delphi XE2のPostMessage返信 削除
2011/9/26 (月) 23:41:58 Mr.XRAY
▼ Saraさん,

> 廃人はいやだぁ〜 orz

ダダをこねないで,仲間になりましょう!! ね,ネ! (笑)

INCM/CMT
Cyclamen v3.82