Tscrollboxが再び見えるようになった後、TscrollboxでScrollbarsを表示するにはどうすればよいですか?
-
27-09-2019 - |
質問
私は1つの小さな問題に遭遇しました。私はいくつかのコントロールを動的に生成し、それらをに配置しています TScrollbox
成分。しかし、スクロールボックスが表示されている場合、ユーザーは各コントロールが作成されて配置されていることを明確に確認できることに気付きました。そのため、多くの作業が行われているように見え、遅いようです。
スクロールボックスを隠して、その上のすべてのコントロールを生成しました。しかし、ここに問題があります。 Scrollboxを再度表示すると、そのフォームを実際にサイズ変更するまで、スクロールバーは表示されません。 (Scrollboxのアライメントはです alClient
)
これを修正する方法に関するアイデアはありますか?
塗り直しを試みましたが、うまくいきませんでした。リフレッシュも機能しませんでした。
ありがとうございました
編集:
TScrollBox(Form1.FindComponent('termai')).Visible:= false;
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do
begin
fNaujasTermas(i,oHook);
end;
TScrollBox(Form1.FindComponent('termai')).Visible := true;
上のコードは、スクロールボックスを非表示および表示する方法を示しています。
fNaujasTermas
いくつかのトラックバー、画像、編集を含むパネルを生成します。
どんなステップバイステップの説明があるかはわかりません。多くのコントロールを備えたパネルを生成し、スクロールボックスを親として設定する手順を作成するだけです。何かを生成する前にスクロールボックスを非表示にして、結局それを解放します。
ところで、パネルは揃っています alTop
. 。そのため、新しいパネルが作成されてScrollboxに配置されるたびに、他のすべてのパネルが下に移動する間、上部に表示されます。
これが、スクロールボックス自体を作成した方法です
pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
edit2:これを再現する方法を知っていると思います。
Scrollboxに新しいパネルを追加すると、すでにそのスクロールボックスにあるすべてのコントロールの総高さにカウントされないようです。
模範を示すために。 1パネルの高さが200pxのとしましょう。
スクロールボックスの高さは300pxです。
したがって、最大400pxの高さになる2つのパネルを作成した後、Scrollboxは2番目のパネルの半分が表示されていない場合でも、Scrollbarsを表示しません。パネルをもう1つ追加すると、合計600pxを追加すると、Scrollboxには、3ではなく2つのパネルごとにスクロールするように見えるScrollbarが表示されます。そのようなウィンドウをスクロールしようとすると、値は再計算され、すべてがうまく表示されます。
主な問題は、Scrollbox Show scrollbarを「時間」に表示する方法です。
解決
Call Realign()
それが継承する方法 TWinControl
. 。ちらつきを最小限に抑えるには、それがまだ見えない間、これを行う必要があります。
ScrollBox.Visible := False;
try
// create your new panel ...
finally
ScrollBox.Realign;
ScrollBox.Visible := True;
end;
他のヒント
コメントで言ったように、私は問題を再現することができません。問題を再現する方法について、ステップバイステップの指示を出した場合に役立ちます。
しかし、フォームをサイズ変更すると問題がなくなると言うと、フォームをサイズ変更してみませんか?多分あなたはそれを使用して0ピクセルをサイズ変更しようとすることができます SetWindowPos
. 。あなたも試してみるかもしれません ScrollBox1.Perform(WM_VSCROLL, SB_PAGEUP, 0);
.