問題タブ [stayontop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4644 参照

delphi - Delphi fsStayOnTop の奇妙さ

これが取引です。に設定されたメイン フォームfsNormal。このメイン フォームは、フローティング ツールバーを備えたフルスクリーンで最大化されています。ツールバーは、スタイルが に設定された通常の形式fsStayOnTopです。

ほとんどの場合、これは期待どおりに機能します。メインフォームが表示され、ツールバーがその上に浮かびます。

他のアプリとの間で Alt キーを押しながらタブ移動するとき (またはタスクバーの Delphi アプリ アイコンをクリックするとき) に、次のような症状が発生することがあります (これは、再現可能な一連の手順を見つけるためのバグです)。

  1. Alt キーを押しながら Delphi アプリから離れると、一番上のフローティングfsStayOnTopフォームが他のアプリの上に表示されたままになります。そのため、Firefox に alt-tab キーを押すと、フローティング メニューも Firefox の上に表示されたままになります。

  2. 別のアプリから Delphi アプリに Alt-Tab キーを押しても、フローティング メニューは表示されません(メインフォームの背後にあるfsNormalため)。

これは既知のバグですか、それとも強制的に機能させるハックはありますか? これは、アプリの複数のコピーが実行されている場合にも最も発生するようです (それらの間で相互作用がなく、独自のウィンドウ "サンドボックス" で実行されている必要があります)。

Delphi がどのウィンドウを一番上に置くべきか混乱して、それらを交換したり、フローティング フォームをすべての上にとどまるモードに変更したりします。

それとも誤解していfsStayOnTopますか?フォーム スタイルを設定してfsStayOnTop、現在のアプリ内の他のすべてのフォームの上にとどまり、他の実行中のアプリ全体のすべてのウィンドウではないと仮定しています。

0 投票する
4 に答える
4838 参照

delphi - fsStayOnTop フォームによって非表示になっているモーダル フォーム

いくつかの複雑なデータを操作できるフォーム (以下の例では TBigForm) があり、追加情報を表示する必要があります。この情報を fsStayOnTop フォーム (例では OnTopForm) に入れて、常に表示されるようにしますが、必要に応じて移動できるようにします。現在、TBigForm の一部のユーザー アクションがモーダル フォームを表示すると、これは多くの場合、OnTopForm の背後に隠れてしまい、アプリがフリーズしているように見えます。どうすればこれを回避できますか? (検索すると非常に多くのヒットが得られますが、それらから解決策を抽出することはできませんでした。)

私の実際のアプリでは、モーダル フォームが表示される場所がたくさんあるので、これらの呼び出しをすべて変更することは避けたいと思います。

: 新しい VCL アプリケーションを作成し、TButton を Form1 にドロップし、ボタンをダブルクリックして、生成された Button1Click 実装スタブを次のように置き換えます。

アプリを起動し、「Button1」をクリックしてから「Freeze!」をクリックします。

(ところで: D2007 を使用します。)

0 投票する
4 に答える
9715 参照

python - PyQt4:「StayOnTop」の動作を切り替えるにはどうすればよいですか?

メインウィンドウが常に他のアプリの上に表示されるようにユーザーが決定するアプリを作成したいと思います。

PyQt4では、常に一番上にとどまるウィンドウを簡単に作成できます。これはここでカバーされています:PyQt:常にトップ

この動作のオンとオフを切り替えるウィジェット(メニュー項目、チェックボックスなど)が欲しいもの。これまでのところ、元の動作をリセットする方法は見つかりませんでした。

ありがとうございました

更新İsmail'cartman'Dönmezの提案の後、私はもう少し検索し、PyQt4でWindowFlagsの例の実装を見つけました。

ここで見つけることができます

0 投票する
2 に答える
5743 参照

delphi - TPanelができるように、上にコントロール?

私のプログラムは時間のかかるタスクを実行しており、アプリケーション ウィンドウの中央に TImage を表示したいのですが、一番上に表示されません。私の VST は常に一番上にあります。しかし、TPanel を使用すると、一番上に表示されたままになりますか? TImageにそれをさせるにはどうすればよいですか?

実際、すべてのコントロールに適用される解決策は素晴らしいでしょう:)

ありがとう!

0 投票する
1 に答える
3270 参照

delphi - FindDialog が一番上に表示されないようにするにはどうすればよいですか (Delphi)?

Delphi 2009 では、単純に次のようにします。

FindDialog ウィンドウは、プログラムのメイン ウィンドウの上に表示されます。

ただし、自分のプログラムのウィンドウの上に他のプログラムから別のウィンドウを開くと、FindDialog ウィンドウが他のウィンドウの上に表示されたままになります。

別のプログラム (メモ帳など) の FindDialog でこれを試しても、これは起こりません。メモ帳とその FindDialog で別のプログラムのウィンドウを開くと、メモ帳と FindDialog の両方のウィンドウが表示されます。これは正しく、期待される動作のようです。

これは私が間違っていることですか、それとも Delphi が FindDialog を実装する方法に問題があるのでしょうか? メモ帳のように機能させるためにできることはありますか?


コメントありがとうございます。私の問題を再現できないという事実は、それが別の原因であるという手がかりです。これは私がそれを追跡するのに役立ちます。もう少し調べて、何かわかったらここに追加情報を投稿します。


とても興味深い。PrintDialog が一番上に表示されません。なぜ私のFindDialogがそうするのかはまだわかりません。まだまだ研究中…


呼び出しを次のように変更しました: FindDialog.Execute(Handle); まだ上です。


別の FindDialog (今回は FindDialog1) をメイン フォームに追加し、プログラムの起動時に実行します。トップに留まる動作は同じです。これは、少なくとも、FindDialog やそのために行ったカスタマイズとは何の関係もないことを示しています。したがって、それは私のメインフォームの設定でなければなりません。


これに遭遇したのは私だけではないようです。参照:リソース チューナー: Delphi アプリケーションのように見えるバージョン履歴。バージョン 1.99 では、次のように記載されています。私は彼らに連絡して、彼らが修正した内容を覚えているかどうかを確認するかもしれません.


フォームにいくつかの新しいダイアログを追加し、これらの呼び出しを 1 か所に配置します。

FindDialog と ReplaceDialog は、他のウィンドウの前面に表示されます。PrintDialog と FontDialog が最上位に留まらず、正常に機能しません。

では、最初の 2 つのダイアログが間違っている原因となっている 2 つのダイアログ セットの違いは何でしょうか?


また、この問題は、Delphi 4 でコンパイルされた私のプログラムの古いバージョンでも発生します。Delphi 4 を使用していた古いバージョンでは、この問題は発生しなかったことがわかりました。

そして、この問題を報告したのはユーザーでした。彼は Windows XP を使用しており、私は Vista で開発しているため、異なる OS で発生します。


確認: はい、新しいフォームを作成し、そこに FindDialog を追加します。FindDialog には問題はありません。これは、私のプログラムの何かが FindDialog を一番上に置いていることを示しています。さて、私はそれが何であるかを知る必要があります。他にアイデアはありますか?誰かが私にこれを解決する手がかりさえ与えてくれる答えをくれたら、彼らは受け入れられた答えを得るでしょう.


解決策: Sertac の回答に対する編集により、回避策が得られました。

これを行うと、アプリケーションが TopMost でない場合に FindDialog が TopMost になるのを防ぎます。

... しかし、これ (NormalizeTopMosts の Delphi ヘルプ) は非常に紛らわしく、これを行う必要があることを示していません。

この「修正」が他の問題を引き起こさないことを願っています。

0 投票する
1 に答える
21348 参照

delphi - TOpenDialogと同様に、所有者フォームの上にモーダルフォームを表示する方法(所有者がfsStayOnTopに設定されているかどうかに関係なく)

要約:

CraigとSertacからの以下の役立つコメントをご覧ください。

================================================== ====

次の最小化されたコードに示すように、TForm10はに設定されますfsStayOnTopTForm10.btnTryDlgClickを呼び出すdlgOpen1.Executeと、表示されるダイアログは期待どおりです。ただし、TForm11.Create(Self).ShowModal内部を呼び出すTForm10.btnTryFormClickと、フォームはTForm10の背後に隠れています。この動作をどのように理解するのか、そしてなぜ標準のTOpenDialogが期待どおりに表示されるのか疑問に思っています。コメントは大歓迎です!

PS:1つの回避策は、TForm11のCreateParamsプロシージャをオーバーライドし、Params.wndParentを0に設定することです。しかし、この回避策を使用すると、ウィンドウ階層が壊れているように見えます。

PS:別の回避策は、以下の関連するSOページでRemyによって言及されています setting the modal Form's PopupParent property to be the StayOnTop Form。しかし、その後のコメントで、Sertacは、この回避策はウィンドウ階層も壊すだろうと述べました。

PS:おそらく関連するSOページ:
fsStayOnTopフォームによって隠されたモーダルフォーム
FindDialogがトップに留まらないようにするにはどうすればよいですか(Delphi)?
ダイアログが常にメインウィンドウの前面にあることを確認するには
、ShowModalが呼び出されたときにフォームが他のフォームの背後に隠れているようにするには、
2つのフォームを互いにオーバーラップできるようにしますか?
複数のフォームのDelphiアプリケーションとダイアログ
新しく作成されたモーダルウィンドウはフォーカスを失い、WindowsVistaDelphiでアクセスできなくなります-Forms
/MsgBoxesが以前のフォームの下に移動しないようにするにはどうすればよいですか?
Showを使用してメインフォームの
フェイクモーダルダイアログの背後にあるDelphiセカンダリフォームを許可するにはどうすればよいですか?
DelphiMainFormOnTaskBarモーダルウィンドウのバグ

Unit10のソース:

Unit10のDFM:

Unit11のソース:

Unit11のDFM:

0 投票する
1 に答える
1617 参照

delphi - Delphi TColorDialog は、stayOnTop フォームの背後で開きます

私は、stayontop フォームである form2 を呼び出すメイン フォーム (form1) を持っています。form2 は、stayontop フォームでもあるモーダル フォーム (form3) を呼び出します。form3 モーダル フォームが colordialog を呼び出すと、form3 の後ろにカラー ダイアログが開きます。

form3の前にカラーダイアログを開くには何を設定すればよいですか?

D2009を使用しています

ありがとう

0 投票する
2 に答える
2675 参照

delphi - Delphi XE のメイン フォームとモーダル ダイアログを「最上位に置く」

Delphi XE Update 1 では、親 (メイン) フォームの FormStyle が fsStayOnTop に設定されている場合、モーダルフォームの一見ランダムな動作が発生します。

1) MainFormOnTaskbar := False (古い方法) を使用すると、すべてが「正常に動作」します。新しい MainFormOnTaskbar := True を使用すると、メイン フォームが「最前面に表示される」ように設定されている場合、モーダル フォームがメイン フォームの背後に隠れます。と言う場合がほとんどです

modalForm.ShowModal への呼び出しが役立つように見える直前。しかしいつもではない。

2)すべてのモーダル フォームはシンプルで、フリルがなく、MainFormCenter に配置され、フォームの継承を使用していません。それでも、PopupParent の修正はそれらの約半分でしか機能せず、残りの半分はまだメイン フォームの後ろに隠れています。最も奇妙なのは、関係のないコード行の順序が壊れたり、変わったりするケースです。次のコードの (1) と (2) の行を参照してください。

この順序で実行すると、モーダル フォームがメイン フォームの上に正しく表示されます。しかし、行を逆にすると、モーダル フォームがメインの後ろに隠れてしまいます。(1) とマークされた行は、モーダル フォームのプロパティを設定します。これにより、TRzPageControl (Raize コンポーネントから) にある TRzCheckGroup でいくつかのチェックボックスがオンまたはオフになります。これは、上記の行 (1) が実行されるときに実行される setter メソッドです。

行 (1) と (2) の順序を逆にすると、モーダル フォームがメイン フォームの後ろに表示されます。

これは TRzCheckGroup (セッター コードの実行時に操作される) を指している可能性がありますが、同じ問題を示し、TRzCheckGroup (または TRzPageControl) を使用しない他の 2 つのフォームがあります。また、Raize コンポーネントを使用した別のサンプル アプリでは問題を再現できませんでした。セッターの期間中、フォーム、ページコントロール、または TRzCheckGroup を無効にしても効果はありません。

モーダル フォームが一度非表示になると、常に非表示になるため、タイミングの問題ではないようです。動作の変更は、コード行を再配置することによってのみ発生します。

3)最後の観察: 私のモーダル フォームは非常にシンプルなので、目に見える遅延もなく、ほぼ瞬時に表示されます。しかし、メイン フォームが fsStayOnTop の場合、その上にモーダル フォームが表示され、その後「押し出される」ことがよくあります。次に、Esc を押すと、(見えない) モーダル フォームがメイン フォームの上にほんの一瞬だけ表示され、その後閉じられます。

後から考えると明らかな何かが欠けているのか、それともこれは精神的なデバッグの必要性なのか、わかりません。何かアイデアはありますか?


更新します。問題が発生した別のフォームで問題を追跡しようとしました。いくつかのボタン (Raize) と TSyntaxMemo (eControl.ru の拡張メモ コンポーネント) があります。このフォームには、問題が発生する他のフォームとの共通点はほとんどありません。コードの一部を削除してテストした後、メモ コンポーネントに文字列を割り当てるメソッドに小さな変更を加えることで、問題を再現できるようになりました。

これは、エディターを含むフォームがメイン フォームの背後に隠れる元のコードです。

割り当てを空の文字列に変更すると、フォームが正しく表示されます。

エディターに 1 文字を割り当てると、フォームが再び非表示になり始めます。

もちろん、他の 2 つの問題のあるフォームは、このエディター コンポーネントまたはそのユニットを使用していません。

メモコントロールを削除して再度追加しようとしましたが(作成順序などを考えてください)、効果はありませんでした。コードでメモを作成する場合も同様です。空でない文字列がメモの Text プロパティに割り当てられるとすぐに、フォームは非表示になります。

0 投票する
1 に答える
17984 参照

vb.net - VB.Net ウィンドウをすべてのウィンドウの上に表示する

パワー ポイントのスライド ショーの上に表示されるウィンドウがあります。したがって、すべてのウィンドウの上にある必要があります。Lib "user32"を使用してVB 6を使用してこれを簡単に実行しましたが、VB.netでは難しいようです。

これはプログラム内でのみ機能するため、機能していないようです。

これもエラーになります!どんな助けでも大歓迎です!前もって感謝します、

よろしく

マンジュラ

0 投票する
1 に答える
2570 参照

python - Selenium:ブラウザウィンドウが取得するたびにトップになるのを止める方法は?

get を実行するたびに、

ブラウザのウィンドウが一番上になり、コンピュータで他のことを行うことができなくなります。

Python、Chrome ドライバー、および Windows 7 を使用しています。

ブラウザがバックラウンドにとどまり、発生するたびに他のウィンドウの上に表示されないようにするにはどうすればよいbrowser.get(a)ですか?