3

TScrollBox から派生したカスタム コントロールがあります。実行時に、垂直スクロールバーが表示されているかどうかを知る必要があります。Visible プロパティを調べると、スクロールバーが表示されているかどうかに関係なく、常に true が返されます。

function TMyScrollPanel.ScrollVisible: boolean;
begin
 Result:=  Self.VertScrollBar.Visible;            <----------- always true
end;

ただし、これは正しく機能します。

function VertScrollBarVisible(WindowHandle: THandle): Boolean;                  
begin
 Result:= (GetWindowlong(WindowHandle, GWL_STYLE) AND WS_VSCROLL) <> 0
end;

最初の関数の何が問題になっていますか?

4

1 に答える 1

7

スクロールバーVisibleプロパティを読み取ると、VCL コントロールの状態のみが取得されます。プロパティは、実際のスクロールバー ウィンドウから現在の状態を取得しません。IsScrollBarVisible代わりにプロパティを使用してください。

IsScrollBarVisibleスクロール可能なウィンドウはスクロールできるため、スクロールバーが表示されているかどうかを確認するには、代わりにメソッドを使用します。

プロパティを読み取ると、Visibleその可視性設定のキャッシュされた値のみが取得されます (可視性または非可視性があります)。スクロール可能なウィンドウの場合、プロパティは実際のウィンドウから現在の状態を取得しません。

于 2012-09-09T16:14:30.800 に答える