Einzelnen Beitrag anzeigen

Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.594 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: VirtualStringTree Node anhand des Index ermitteln

  Alt 22. Okt 2009, 09:31
die schleife ist kein problem und auch bei vielen Nodes sehr schnell:

hier mal ein beispiel:

Delphi-Quellcode:
const
  VST_MOVEDOWN = -5;
  VST_MOVEUP = -6;

class procedure TVirtualTreeviewHelper.SelectNode(_Vst: TBaseVirtualTree;
  _StartNode: PVirtualNode; _IndexToSelect: Integer;_Center : Boolean = true);
begin
  _Vst.ClearSelection;

  if _StartNode = nil then
    _StartNode := _Vst.RootNode.FirstChild;

  if _StartNode = nil then
    exit;

  case _IndexToSelect of
    VST_MOVEDOWN : _IndexToSelect := _StartNode.Index+1;
    VST_MOVEUP : _IndexToSelect := _StartNode.Index-1;
    -1 : exit;
  end;

  while _StartNode <> nil do
  begin
    if Integer(_StartNode.Index) = _IndexToSelect then
    begin
      _Vst.Selected[_StartNode] := true;
      _Vst.FocusedNode := _StartNode;
      _Vst.FocusedColumn := 0;
      _Vst.ScrollIntoView(_StartNode,_Center);
      break;
    end;
    if Integer(_StartNode.Index) < _IndexToSelect then
      _StartNode := _StartNode.NextSibling
    else
      _StartNode := _StartNode.PrevSibling;
  end;
end;
Sven Harazim
--
  Mit Zitat antworten Zitat