TVirtualStringTree の使い方を学びましたが、すばらしいと思いました。別のスレッドによって埋められる PackedList と呼ばれるカスタムの非ビジュアル リストが 1 つあります。そして、TVirtualStringTree のすべてのリスト コンテンツをリアルタイムで表示したいと考えています。そこで、メインフォームに 1 つのタイマーを配置して、HexLog (TVirtualStringTree) の RootNodeCount を 500 ミリ秒ごとに更新します。
私のデータはすべて VirtualStringTree に表示され、速度の問題はありません。しかし、垂直スクロール バーには 1 つの問題があります。リストの最後にジャンプするためにコントロールで Ctrl+End を押すと、途中のどこかに移動します。同様に、スクロールバーを最後までドラッグしても、最後まで移動しません。しかし、HexLog は DataCount を知っています。最後までジャンプしないのはなぜですか?Ctrl+END を数回押すと、最後まで到達します。
タイマールーチンの中で、コードでリストの最後にジャンプする HexLog と言いたいです。これを行うにはどうすればよいですか?また、垂直スクロールバーを適切に処理するにはどうすればよいですか?
procedure TMainForm.StatusUpdateTimerTimer(Sender: TObject);
begin
if (FirpList.ComOperationCount > 0) and (PacketList.Items.Count <> FirpList.ComOperationCount) then
begin
HexLog.RootNodeCount := PacketList.Items.Count;
end;
end;
procedure TMainForm.HexLogMeasureItem(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer);
begin
if Sender.MultiLine[Node] then
begin
TargetCanvas.Font := Sender.Font;
NodeHeight := HexLog.ComputeNodeHeight(TargetCanvas, Node, 1, FirpList.ComOperations[Node^.Parent^.Index].DataAsHexString(FAppSettings.HexLogColumnCharWidth) + #13#10);
end;
end;
TLama による提案された返信が正しく機能していません。説明については画像を参照してください。
詳細な画像の説明については、そのリンクを参照してください: http://i43.tinypic.com/1445thi.png