カスタムコントロール(TCustomControlの子孫)が現在表示されているかどうかを判断する方法が必要です。私は.Visibleプロパティについて話していません。現時点で実際に画面に表示されているかどうかを意味します。誰もこれを行う方法を知っていますか?Delphiコントロールが現在表示されているかどうかを確認するにはどうすればよいですか?
答えて
私はFormと同じ種類の問題を抱えていました。フォームが実際に(部分的にでも)ユーザーに表示されるかどうかを判断する方法を探していました。
特に、表示されるはずの表示がTrueの場合、ウィンドウは実際には別のウィンドウの後ろに表示されます。ここで
はそれがWinControlに適合させることができ、コードの...あなたはそれが別のウィンドウで覆われているかどうかを
{----------------------------------------------------------}
function IsMyFormCovered(const MyForm: TForm): Boolean;
var
MyRect: TRect;
MyRgn, TempRgn: HRGN;
RType: Integer;
hw: HWND;
begin
MyRect := MyForm.BoundsRect; // screen coordinates
MyRgn := CreateRectRgnIndirect(MyRect); // MyForm not overlapped region
hw := GetTopWindow(0); // currently examined topwindow
RType := SIMPLEREGION; // MyRgn type
// From topmost window downto MyForm, build the not overlapped portion of MyForm
while (hw<>0) and (hw <> MyForm.handle) and (RType <> NULLREGION) do
begin
// nothing to do if hidden window
if IsWindowVisible(hw) then
begin
GetWindowRect(hw, MyRect);
TempRgn := CreateRectRgnIndirect(MyRect);// currently examined window region
RType := CombineRgn(MyRgn, MyRgn, TempRgn, RGN_DIFF); // diff intersect
DeleteObject(TempRgn);
end; {if}
if RType <> NULLREGION then // there's a remaining portion
hw := GetNextWindow(hw, GW_HWNDNEXT);
end; {while}
DeleteObject(MyRgn);
Result := RType = NULLREGION;
end;
function IsMyFormVisible(const MyForm : TForm): Boolean;
begin
Result:= MyForm.visible and
isWindowVisible(MyForm.Handle) and
not IsMyFormCovered(MyForm);
end;
ありがとう!それはまさに私が探していたものです。 –
OnPaintイベントにコードを添付できますか?これは非常に頻繁に呼び出され、コントロールが実際にペイントされるときにのみ呼び出されると思います(例えば、あなたが意味する方法で表示されます)。
私はこれを最善の指標としています。 Vistaではすべてのアプリケーションがオフスクリーンのビットマップに描画され、グラフィックカードにオーバーレイなどが含まれているため、決して確実に確認することはできません。 – mj2008
しかし、現時点で画面に表示される場合は、 ? –
WM_PAINTは、そのピクセルが画面に当たったときに来ると仮定するのは安全だとは思いません。 Desktop Composition(http://msdn.microsoft.com/en-us/library/aa969540%28VS.85%29.aspx)を使用すると、WindowsはWindows Flip(http:// www。 microsoft.com/windows/windows-vista/features/flip-3d.aspx)*すべてのウィンドウを一度に必要とする可能性があります。このため、私はいくつかのバックグラウンドのキャッシュリフレッシュがあると思います。 –
私はこれがTWinControl.Showingの目的だと思います。 私はそれがどれほど信頼できるか分かりません。
フォームなどでは機能しません。フォームは完全に別のフォームの背後にあることができ、まだ真を表示しています。 –
私が言ったように、私はそれがどれほど徹底しているか分かりませんでした。 –
表示のみは、すべての親コントロールが表示されているかどうかを示します。これは、設計モードでいくつかの状況を区別します。目に見えない成分が見える。つまり、現時点で表示されているコンポーネントが表示されているかどうかを示します。 –
- 1. 座標が現在表示されているマップ領域にあるかどうかを確認するにはどうすればよいですか?
- 2. ビューが現在iPhoneに表示されているかどうかを確認するにはどうすればよいですか?
- 3. 現在のアクティビティにダイアログが表示されているかどうかを確認するにはどうすればよいですか?
- 4. UIViewControllerが現在表示されているかどうかを確認するにはどうすればよいですか?
- 5. ランチャー/ホーム画面が現在表示されているかどうかを確認するにはどうすればいいですか
- 6. コントロールが現在無効になっているかどうかを確認するにはどうすればよいですか?
- 7. Firefoxが現在実行中にヘッドレスモードで実行されているかどうかを確認するにはどうすればよいですか?
- 8. 現在のPCユーザーが現在ログオンしているユーザーかどうかを確認するにはどうすればよいですか?
- 9. ファイルが存在するかどうかを確認するにはどうすればよいですか?
- 10. レポが存在するかどうかを確認するにはどうすればよいですか?
- 11. ルート「URL」が存在するかどうかを確認するにはどうすればよいですか?
- 12. メールアドレスが存在するかどうかを確認するにはどうすればよいですか?
- 13. ファイルが存在するかどうかを確認するにはどうすればよいですか?
- 14. 変数が存在するかどうかを確認するにはどうすればよいですか?
- 15. リソースが存在するかどうかを確認するにはどうすればよいですか?
- 16. ソケットが現在Javaで接続されているかどうかを確認するにはどうすればよいですか?
- 17. スプライトオブジェクトが表示されているかどうかを確認するには?
- 18. 分度器でいくつかの要素が表示されているかどうかを確認するにはどうすればよいですか?
- 19. 変数が存在するかどうかを確認するにはどうすればいいですか?
- 20. ポップアップページが開いているかどうかを確認するにはどうすればよいですか?
- 21. XMLレイアウトが現在表示されているかどうかを確認しますか?
- 22. エラーが返されたかどうかを確認するにはどうすればよいですか?
- 23. リンクが訪問されたかどうかを確認するにはどうすればよいですか?
- 24. DataGridViewコントロールの現在のセル位置を非表示にするにはどうすればよいですか?
- 25. イメージがページに表示されているかどうかをセレンで確認するにはどうすればよいですか?
- 26. ネットパイプサービスがリッスンしているかどうかを確認するにはどうすればよいですか
- 27. Delphiでメッセージが送信された場所を確認するにはどうすればよいですか?
- 28. ログインフォームに既に登録されているユーザーがデータベースに存在するかどうかを確認するにはどうすればよいですか?
- 29. DataGridViewに「x」列と「x」列が表示されているかどうかを確認するにはどうすればよいですか?
- 30. html要素が画面に表示されているかどうかを確認するにはどうすればよいですか?
を意味していますか? –
私はそれが画面に描画されているかどうかを意味します。カバーされることが1つの理由かもしれません。まだ作成されていないがまだ表示されていないフォームに配置されている場合は別のものになる可能性があります。 –