デルフィで; Application.MessageBox、Windows.MessageBox、または Dialogs.MessageDlg の違いは何ですか? または、どちらがコンピューターのメモリをより効率的に使用できますか?
6 に答える
Windows.MessageBoxはWinAPI MessageBox であり、Application.MessageBox はそのラッパーです。ただし、Dialogs.MessageDlg は VCL フォームです。したがって、メモリまたはスレッドの安全性が気になる場合は、最初の 2 つが適している可能性があります。MessageDlg OTOH はより柔軟で使いやすくなっています (もちろん私見です)。
最近では、タスク ダイアログ (TaskDialogIndirect、TTaskDialog、または別のラッパー) を検討します。
Windows MessageBox は OS によってローカライズされます (はい、いいえ、キャンセル...)。MessageDlg は手動でローカライズできます。
メッセージ ボックスでは、メモリの使用量がそれほど問題になることはありません。Consts.pas ユニットからローカライズできるので、個人的には VCL フォーム (Dialogs.MessageBox) を好みます。また、「今後これを表示しない」チェックボックスなど、カスタム コントロールを追加できる点も気に入っています。
私の記憶が正しければ、Delphi VCL メッセージ ボックスと Windows のメッセージ ボックスには重要な違いが 1 つあります。アプリケーション メッセージの処理を停止するフラグを指定できます (例: MB_SYSTEMMODAL)。これは、アプリケーションを「フリーズ」する必要がある場合にエラーを表示するのに役立ちます。Delphi MessageDlg は、画面上であってもタイマー イベントを発生させます。見る:
メッセージ ボックスが使用するわずかなメモリ量を気にするのはなぜですか。Delphi アプリケーションを作成する際に考慮しなければならないことが他にもたくさんあります。いずれにせよ、私が知る限り、これらはすべて Windows MessageBox API のシン ラッパーです。
それらはすべて同じことを行います - WinAPI 関数 MessageBox() を呼び出します。リソース消費量の差がある場合、その差は最小限です。どうしても気になる場合は、MessageBox() を直接呼び出すことができます。「uses Windows」を含めるだけです。