私は、ユーザーインターフェイスとのやりとりを妨げるようなモーダルフォームをDelphiで作成しようとしていますが、他のフォームの実行は引き続き可能です。これは可能ですか?Delphiのモーダルフォームは非ブロック化できますか?
2
A
答えて
2
フォームには「実行」はありませんが、アクティブな(モーダル)フォームがある間にスレッドを使用してバックグラウンドでコードを実行できます。
3
モーダルフォームは、モーダルフォームが閉じたときにのみ返される関数ShowModal
を呼び出すことによって呼び出されます。同じスレッド、つまりUIスレッドでコードを実行する場合は、ShowModal
から呼び出す必要があります。ほとんどの場合、それは耐えられるアプローチではありません。そこから、問題のコードはUIスレッド以外のスレッドで実行されなければならないと結論づけることができます。
3
Windowsはバックグラウンドでメッセージを処理し続けるため、たとえばタイマーで発生した更新は引き続き発生します。すべてのキーボードイベントとマウスイベントがモーダルフォームに向けられているだけです。理論的には、メッセージを別のフォームに投稿して、必要に応じて「アクション」コードを追加することができます。あなたが主なスレッドでまだやっていることがたくさんあります。質問は、これがあなたが実際にやりたいことかどうかです。
2
可能ですが、お勧めしません。
これは、メインスレッドで引き続きアプリケーションがビジー状態であると言う進捗状況を示すために行っています。
ShowModalのコードを半分に分割し、repeat untilループを削除することです。
フォームを表示するために前半を呼び出すことができます。後半を呼び出してもう一度閉じることができます。
ShowModal内ループで終端されているアプリのApplication.HandleMessage ABDチェックへの呼び出しがあること
NonBlockingModalForm = TNonBlockingModalForm.Create();
try
NonBlockingModalForm.FirstHalfOfShowModal;
DoStuff;
finally
NonBlockingModalForm.SecondHalfOfShowModal;
NonBlockingModalForm.Free;
end;
ノートの線に沿って何か。
UIをうまく再生したい場合は、これを行う必要があります。
関連する問題
- 1. Delphi onshowメインフォーム/モーダルフォーム
- 2. C#モーダルフォームの前に非モーダルフォームを表示しますか?
- 3. CenterParent非モーダルフォームへの方法
- 4. Java非ブロック化HTTPサーバー
- 5. HTTP応答が要求されたときの非ブロック化オプション
- 6. SQLAlchemyを非ブロックに設定できますか?
- 7. Delphiのモーダルフォームにリリースの代わりにフリーを使用するのは安全ですか?
- 8. Springは「非Bean」フィールドを初期化できますか?
- 9. QDialogはブロックされていますが、非モーダルですか?
- 10. Delphi(非OLE)用のOpenOffice.orgエクスポートコンポーネントはありますか?
- 11. glGetErrorはスレッドをブロックできますか?
- 12. 非ブロック化IOを使用してファイルに書き込む方法は?
- 13. DelphiでUSBストレージデバイスからrawブロックを読み取る方法は?
- 14. C#で匿名の非結合ブロックの値は何ですか?
- 15. インオーダーキューへの非ブロック書き込み
- 16. 機能非同期/非ブロック化の方法に関するガイダンスが必要
- 17. bashの非ブロック化FIFOに関する問題
- 18. 非同期io_machine内でブロックI/Oを使用できますか?
- 19. try catchブロックでvalオブジェクトをどのように初期化できますか?
- 20. FilewatcherはJavaのIOを非ブロックと見なしますか?
- 21. モーダルフォームjqueryの
- 22. Androidの非ブロックIO
- 23. Delphiの抽象化
- 24. Delphiコンポーネントのシリアル化
- 25. 親フォームは、非モーダルフォームがまだ開いているかどうかをどのように伝えることができますか?
- 26. 非同期ブロック
- 27. PHPが非ブロック
- 28. 別のスクリプトの内部からPHPスクリプトを起動する。非ブロック化
- 29. 非ブロック型ソケットプログラミング(Pythonで)
- 30. C++ 11;非静的データメンバ初期化は他のデータメンバにアクセスできますか?
あなたはフォームから出てほしいものを、どこに属している場所に移動してみませんか? MVCまで行く人もいれば、自分のロジックをすべて自分のフォームに入れない限り行く。 –
この質問は私には明らかではありません。私はあなたが本当に欲しいものは何ですか?ユーザー対話またはコードの実行? –
私は、Modalフォームの全体的な設計目的は、質問を誤解していない限り、背景が相互作用しないようにすることだと思いましたか? –