私は1つの小さな問題に遭遇しました。いくつかのコントロールを動的に生成し、それらをTScrollbox
コンポーネントに配置しています。しかし、スクロールボックスが表示されている場合、ユーザーは作成および配置されている各コントロールを明確に確認できることに気付きました。そのため、多くの作業が行われているように見え、遅いです。
スクロールボックスを非表示にして、その上にすべてのコントロールを生成しました。これにより、時間が大幅に短縮され、ちらつきなどが発生しませんでした。しかし、ここに問題があります。スクロールボックスを再度表示すると、実際にフォームのサイズを変更するまで、そのスクロールバーは表示されません。(スクロールボックスの配置は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
いくつかのトラックバー、画像、編集を含むパネルを生成します。
ステップバイステップの説明があるかどうかはわかりません。多くのコントロールを備えたパネルを生成し、ScrollBoxを親として設定する手順を作成するだけです。何かを生成する前にスクロールボックスを非表示にし、すべてが完了したら再表示します。
ところで、パネルは整列してalTop
います。したがって、新しいパネルが作成されてスクロールボックスに配置されるたびに、他のすべてのパネルが下に移動する間、そのパネルは上部に表示されます。
これが私がスクロールボックス自体を作成した方法です
pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
EDIT2:私はこれを再現する方法を知っていると思います。
スクロールボックスに新しいパネルを追加するとき、そのスクロールボックスにすでにあるすべてのコントロールの高さの合計にはカウントされないようです。
例を挙げると。1つのパネルの高さが200pxだとします。
ScrollBoxの高さは300pxです。
したがって、合計で400pxの高さになる2つのパネルを作成した後、2番目のパネルの半分が表示されていなくても、scrollboxにはスクロールバーが表示されません。パネルをもう1つ追加すると、合計600ピクセルになります。スクロールボックスには、3つではなく、2つのパネルごとにのみスクロールするように見えるスクロールバーが表示されます。このようなウィンドウをスクロールしようとすると、値が再計算され、すべてが適切に表示されます。
したがって、主な問題は、スクロールボックスにスクロールバーを「時間内に」表示して、パネルが半分カットされないようにする方法です。