TVirtualStringTree и вертикальная прокрутка не работают должным образом.

Я научился использовать TVirtualStringTree, и я нашел его превосходным. У меня есть один пользовательский не-визуальный список под названием PackedList, который заполняется другим потоком. И я хочу показать все содержимое списка в TVirtualStringTree в реальном времени. Поэтому я поставил один таймер на основную форму для обновления HexLog (, который является TVirtualStringTree)RootNodeCount каждые 500 мс.

Все мои данные отображаются в VirtualStringTree, и у меня нет проблем со скоростью, очень приятно. Но есть одна проблема с вертикальной полосой прокрутки. Когда я нажимаю 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;

Appearance of HexLog

Предложенный ответ TLama не работает должным образом, см. изображение для объяснения: TLama solution is not working

См. эту ссылку для подробного объяснения изображения:http://i43.tinypic.com/1445thi.png

6
задан Ian Boyd 18 July 2018 в 20:43
поделиться