垂直スクロールがTScrollBox
あり、水平スクロールバーが無効になっています。このスクロール ボックス内には、上部に配置された 1 つの大きなパネルがあり、その高さはその内容に基づいて動的に計算されます。その内容は 2 つのパネルで、1 つは左側に配置され、もう 1 つはクライアントが配置され、その間にスプリッターがあります。これら 2 つのパネルのそれぞれの内部には、ユーザーが選択した一連のパネルが上部に配置されており、動的にサイズ変更することもできるため、スクロール ボックス内のメイン パネルの高さを拡大/縮小できます。
procedure TfrmDashboard.ResizePanels;
var
X: Integer;
H1, H2: Integer;
H: Integer;
begin
H1:= 0;
H2:= 0;
//Calculate height of left panel
for X := 0 to p1.ControlCount-1 do
H1:= H1 + p1.Controls[X].Height;
//Calculate height of right panel
for X := 0 to p2.ControlCount-1 do
H2:= H2 + p2.Controls[X].Height;
//Check which panel is larger
H:= H1;
if H2 > H then
H:= H2;
//Adjust scrolling height
pMain.Height:= H + 10;
SB.VertScrollBar.Range:= pMain.Height;
SB.VertScrollBar.Size:= pMain.Height;
end;
同時に、コンテンツのこれらの小さなサブパネルのほとんどには、フォーカスを受け取るコントロールもあり、フォーカスを取得できるようにする必要があります。現在、すべてがスクロールで正常に動作します。
この問題は、ユーザーがスクロール ボックス内のそのようなフォーカス可能なコントロールの 1 つをクリックしたときに発生します。そのコントロールが部分的に非表示になっている場合 (コントロールの上部がスクロール位置の上部より上に伸びている)、スクロール ボックス全体がジャンプして、このコントロールがスクロール ボックスの上部に配置されます。
これは「機能」のようですが、無効にしたい機能です。この状況ではかなり厄介です。子の 1 つがフォーカスを受け取ったときにスクロール ボックスの位置がジャンプしないようにするにはどうすればよいですか?