2008-08-22 21 views
4

ドキュメントの2つのビューを持つDelphi 7アプリケーションがあります(たとえば、WYSIWYG HTML編集ではWYSIWYGビューとソースビューがありますが、実際のアプリケーションではありません)。別のウィンドウで開くことも、メインウィンドウのタブにドッキングすることもできます。複数のフォームDelphiアプリケーションとダイアログ

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

私はそれが関連しているフォームに所有者とParentWindowのプロパティを設定しようとしました:

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

私はこの問題を解決することができますか?ほかに何をしようとしていますか?

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

メモ:Delphi 7を使用していて、この問題の解決策を探している場合は、ページの下にある私の回答を参照してください。

答えて

5

私は非常にあなたがになっているか理解していないが、ここで私はあなたができる提案することができますいくつかのことだ

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

で回答をして推測しています私は長年の問題を解決しました。ありがとうございました。 –

0

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

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

1

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

0

(ラースが言った基本的にはどのような)...このコードを使用すると思います試してみてください...

  1. この動作は、さまざまなバージョンのDelphiで異なります。
  2. Delphi 2007を使用している場合は、Application.MainFormOnTaskBarブール変数を設定するプロジェクトソースファイルから行を削除してみてください。
  3. これを削除すると、さまざまなフォームのBringToFront/SendToBackメソッドを使用して、後に続くZオーダーを達成できるはずです。

私は何を発見したことはもちろんthis link に議論されてきたと思われる、私は完全にあなたのポイントを逃したので、事前に謝罪している可能性があります!

3

最終的にGoogleグループを使用してanswerが見つかりました。一言で言えば、すべてのモーダルダイアログがそれらに追加された次の持っている必要があります。


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

私は、これはこれは持っているラースの同等とマリウスデルファイ7

関連する問題