4

ドキュメントの2つのビューを持つDelphi7アプリケーションがあります(たとえば、WYSIWYG HTML編集にはWYSIWYGビューとソースビューがある場合があります-実際のアプリケーションではありません)。それらは別々のウィンドウで開くか、メインウィンドウのタブにドッキングすることができます。

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

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

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

この問題を解決するにはどうすればよいですか?他に何をしようとすべきですか?

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

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

4

5 に答える 5

5

私はこのコードを使用します...(基本的にラースが言ったこと)

dialog := TDialogForm.Create( parentForm );
dialog.PopupParent := parentForm;
dialog.PopupMode   := pmExplicit; 
dialog.ShowModal();
于 2008-08-22T09:28:14.480 に答える
3

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


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

これは、Delphi7のLarsとMariusの回答に相当すると思います。

于 2008-08-27T00:38:15.370 に答える
1

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

于 2008-08-22T07:08:04.850 に答える
0

まず第一に、私が従うかどうかは完全にはわかりません。何が起こっているのか、何が問題なのかを理解するのに役立つ追加の詳細を提供する必要があるかもしれません。あなたが何を達成しようとしているのか、そして何が問題なのかを正確に理解しているとは思えません。

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

于 2008-08-22T05:06:19.120 に答える
0

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

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

あなたが発見したことは、このリンクで議論されていると思います もちろん、私はあなたの要点を完全に見逃しているかもしれません。

于 2008-08-22T11:29:17.013 に答える