問題タブ [window-position]
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.
delphi - 最小化中にプログラムを閉じると、ウィンドウの位置の値が正しくない
私の Windows 7 デスクトップでは、Windows タスクバーが画面の左側 (デフォルトでは下部) に接続され、カスタム デスクトップ ツールバー ("True Launch Bar") が画面の上部に接続されています。
Delphi XE8 VCL プロジェクトでは、メイン ウィンドウの位置の値 (formMain.Top
とformMain.Left
) をFormClose
イベントに保存し、プログラムの開始時にこれらの値を使用してメイン ウィンドウの位置をイベントに復元しますFormCreate
。
これは通常うまく機能します。ただしformMain.WindowState
、最小化 ( = )しているときにプログラムを閉じるとwsMinimized
、フォームの位置の値が間違っている (つまり、ツールバーの幅/高さによって縮小される) ため、プログラムの開始時にウィンドウが間違った位置に復元されます。
では、どうすればこの問題を解決できますか?
編集: Davidが言及した他の解決策を試しました:
ただし、WORK AREA 値のみを取得するため、ツールバーが占有するスペースが考慮されないため、これは同じ問題を引き起こします。
さらに、これはデビッドが述べた重複した質問ではなく、類似の質問です。この問題は、最小化された状態のときに画面の値が間違っていることに起因しますが、もう 1 つの問題は、全体的な状態とサイズの復元に関するものです。
また、注意してください:ウィンドウの状態(最小化など)と位置を復元したくないのですが、ウィンドウの位置のみを復元したいのでSetWindowPlacement
、他の質問でDavidが述べたように使用できません。
EDIT2:このコードで問題を解決しました:
(ウィンドウが最大化されている場合、ウィンドウの位置を保存して復元するのではなく、最大化されたウィンドウの状態のみを保存して復元します)。
c - TOPMOST ウィンドウの後にウィンドウを配置する
TOPMOST のウィンドウがあり、最初のウィンドウの後ろに配置したい別の (myWindow) ウィンドウがあり、2 番目のウィンドウを一番上にしたくない:
しかし、myWindow は一番上のウィンドウのように動作し続けWS_EX_TOPMOST
、拡張スタイルの myWindow のプロパティをチェックすると、まだ有効になっています。一番上のウィンドウの後にウィンドウを配置しているにもかかわらず、一番上のビットをオフにすることは可能ですか?
c# - WPFウィンドウの場所の変更の原因を見つける方法は?
コンピューターを休止状態から再開するたびに、Window
の位置が画面の上部に移動するようです。ウィンドウの場所を記録するために次のものがあります。
WindowTop
Window
ファイルからメモリに読み込まれるプロパティで、最後に閉じられる前の場所を追跡します。これが起動時に出力されるときはいつでも、両方の値が期待どおりに正しいです。ただし、休止状態から再開した後、実際の値として 0 が出力されますが、設定値は同じままです。これにより、誤った設定値がロードされることが原因でなくなります。
また、コンピューターが休止状態から再開するたびに設定を再読み込みしようとしています。
これでも問題は解決しません。MessageBox
ただし、ロードの前に を追加するとWindow
、間違った場所に が表示され、設定が適切にロードされ、正しい設定に切り替わります。ウィンドウを元の場所から移動したため、再開時に場所が正しく修正され、コンピューターのロックを解除した後、何らかの形でTop = 0
. 奇妙なことは、Left
この問題にまったく悩まされていないことです。ソリューションでの両方のプロパティの使用法はすべて同じです。これはバニラの WPF アプリケーションでは発生しないため、これをさらに調査する方法がよくわかりません。奇妙なことに、コンピューターを休止状態にせずに手動でロックしただけでは、これは発生しません。
どういうわけか私Window
のTop
プロパティを変更しているものを見つける方法はありますか?
編集: 私の回避策は、そこから and を使用SystemEvents.SessionSwitch
しSessionSwitchReason.SessionUnlock
て呼び出すLoadUiSettings
ことですが、それでも実際の問題に対する応急処置です。何が原因なのかを突き止めて、根本から解決したいと思っています。
編集 2: Window が現在表示されていない場合、それを設定しても実際の位置は変更されません。可視性を一時的にオーバーライドしてから、次のことを実行しました。
調整を待っている間、ウィンドウが一瞬表示され、再び消えた後、UI を介して手動で表示を切り替えると、再び上部に表示されます。すでに正しい場所にあるときに手動で切り替えると、この動作は発生しません。
.net - .netを使用してWindowsエクスプローラーの位置を取得するには?
Windowsエクスプローラーウィンドウがフォアグラウンドにあるときにトリガーされるアプリケーションを開発しています。私のアプリケーションは、開いている Windows エクスプローラーの近くの画面に配置されるウィンドウ (フォーム) をトリガーします (検索オプションのすぐ下に保持する予定です)。
しかし、フォアグラウンドの「Windows Explorer」ウィンドウのウィンドウ位置を取得するために何も取得していません。
.net を使用して、現在の最前面の「Windows Explorer」ウィンドウの位置を読み取る方法はありますか?
c# - 現在最小化されているウィンドウが、最小化時に最大化された状態または通常の状態であったかどうかを確認します
C#/WinForms の通常の状態とは対照的に、現在最小化されているウィンドウがその前に最大化されたかどうかを区別するにはどうすればよいですか?
アプリケーション設定を使用してウィンドウの位置と状態を永続的にしたいのですが、 https://stackoverflow.com/a/1876326/492336に従っていますが、閉じるときにウィンドウが最小化されていた場合次のアプリケーションの起動時に最小化されて起動します(これが現在の答えです)。
私が望むのは、ウィンドウが最小化されたときに最大化されていた場合は最大化され、最小化されたときに通常の状態にあった場合は通常の状態で開始することです。