質問

ドキュメントの 2 つのビュー (例:WYSIWYG HTML 編集には、WYSIWYG ビューとソース ビューが含まれる場合があります (私の実際のアプリケーションではありません)。これらは別のウィンドウで開くことも、メイン ウィンドウのタブにドッキングすることもできます。

別個のフォームの 1 つからモーダル ダイアログを開くと、メイン フォームが前面に表示され、Windows タスクバーに選択されたウィンドウとして表示されます。メイン フォームが WYSIWYG ビューで、ソース ビューがポップアウトされているとします。ソース ビューの特定のポイントに移動し、イメージ タグを挿入します。ダイアログが表示され、画像に必要なプロパティを選択して入力できます。WYSIWYG ビューとソース ビューが重なる場合、WYSIWYG ビューが前面に表示され、ソース ビューは非表示になります。ダイアログを閉じると、ソース ビューが再び表示されます。

所有者とParentWindowプロパティを、それに関連するフォームに設定してみました。

dialog := TDialogForm.Create( parentForm );
dialog.ParentWindow := parentForm.Handle;

この問題はどうすれば解決できますか?他に何を試すべきでしょうか?

人々が私の例でつまずいているように見えることを考えると、もっと良い例を試してみることができるかもしれません。同時に複数のファイルを開くことができるテキスト エディター。開いているファイルは、タブ (Delphi IDE など) または独自のウィンドウのいずれかにあります。ユーザーがスペルチェックダイアログまたは検索ダイアログを表示するとします。ファイルが独自のウィンドウで編集されている場合、モーダル ダイアログが表示されると、そのウィンドウは Z オーダーでメイン フォームの下に送信されます。ダイアログを閉じると、元の Z オーダーに戻ります。

注記:Delphi 7 を使用していて、この問題の解決策を探している場合は、ページの下の方にある私の回答を参照して、最終的に何をしたかを確認してください。

役に立ちましたか?

解決

このコードを使うといいのですが...(基本的にラーズが言ったことです)

dialog := TDialogForm.Create( parentForm );
dialog.PopupParent := parentForm;
dialog.PopupMode   := pmExplicit; 
dialog.ShowModal();

他のヒント

最終的に見つけたのは、 答え Google グループを使用します。一言で言えば、すべてのモーダル ダイアログに以下を追加する必要があります。


procedure TDialogForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or WS_POPUP;
  Params.WndParent := (Owner as TWinControl).Handle;
end;

これは、Delphi 7 の Lars と Marius の答えと同等のことを行うと思います。

ダイアログは ShowModal を使用して表示されますか、それとも単に Show を使用しますか?おそらくダイアログの PopupMode プロパティを正しく設定する必要があります。pmAuto がおそらく最良の選択でしょう。PopupParent プロパティを設定する必要があるかどうかも確認してください。

まず最初に、自分がフォローしているかどうか完全に自信がありません。何が起こっているのか、何が問題なのかを理解するために、追加の詳細情報を提供していただく必要があるかもしれません。あなたが何を達成しようとしているのか、何が問題なのかを正確に理解しているかどうかはわかりません。

次に、ダイアログの親を設定する必要はありません。これは、基本的に Create の呼び出し (親を渡す) で行われていることだからです。あなたが説明しているダイアログは、正直に言うと、少し「再考」する必要があるように思えます。画像のプロパティを入力するこのダイアログは、ソース ウィンドウの子ですか、それとも WYSIWYG ウィンドウですか?

あなたが何をしようとしているのかよく理解できませんが、試してみることをお勧めできることがいくつかあります...

  1. この動作は、Delphi のバージョンが異なると異なります。これは、Delphi 2007 で Windows Vista をサポートするために彼らが乗り越えた困難が原因であると私は考えています。
  2. Delphi 2007 を使用している場合は、プロジェクト ソース ファイルから Application.MainFormOnTaskBar ブール変数を設定する行を削除してみてください。
  3. これを削除すると、さまざまな Form の BringToFront / SendToBack メソッドを使用して、目的の Z オーダーを実現できるようになります。

あなたが発見したことは何かで議論されたのではないかと思います このリンクもちろん、私があなたの要点を完全に見逃していたかもしれませんので、あらかじめお詫びを申し上げます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top