Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: TreeViewTools (rund um Node.Text und Node-Path)

  Alt 8. Mär 2009, 12:00
hab erstmal nur kurz reingeblickt: (Änderungen mit <<< markiert)
Delphi-Quellcode:
function GetNodePath(aNode:TTreeNode; WithDelimiter: Boolean): String;
begin
  if Assigned(aNode) then begin
    if WithDelimiter then Result := aNode.Text +'\'
      else Result := aNode.Text;
    aNode := aNode.Parent;
    while assigned(aNode) do begin
      Result := aNode.text + '\' + Result;
      aNode := aNode.Parent;
    end;
  end else Result := ''; <<<<<
end;
// ist jetzt nichts Schlimmes, aber Result war sonst "sinnlos",
// da es in [i]if WithDelimiter then ...[/i] eh überschrieben wurde

Function FindNodeByPath(aTreeView: TTreeView; aPath: String): TTreeNode;
Var
  Path: TArrayOfString;
  i, i2: Integer;
Begin
  Result := nil;
  if aPath='then exit;

  //Path := Mixed.Explode('\', ExcludeTrailingBackslash(aPath));
  aPath := IncludeTrailingBackslash(aPath);
  while aPath <> 'do begin
    i2 := Pos('\', aPath); <<<<<
    i := Length(Path);
    SetLength(Path, i+1);
    Path[i] := Copy(aPath, 1, i2-1); <<<<<
    Delete(aPath, 1, i2); <<<<<
  end;

  Result := aTreeView.Items.GetFirstNode;
  i := 0;
  While Assigned(Result) do Begin
    if Result.Text = Path[i] Then Begin
      If i < High(Path) Then Begin
        Inc(i);
        Result := Result.getFirstChild;
      End Else Exit;
    End Else Result := Result.getNextSibling;
  End;
End;

function NodeTextExistsInTwig(aTreeView: TTreeView; aParentNode: TTreeNode; aText : String): Boolean;
var
  aNode : TTreeNode;
begin
  Result := False;
  aText := AnsiUpperCase(aText); <<<<<<<<<
  aNode := NIL;

  // richtigen FirstNode ermitteln
  if Assigned(aParentNode) then aNode := aParentNode.GetFirstChild
    else if Assigned(aTreeView) then aNode := aTreeView.TopItem;

  // StartNode und SchwesterNodes prüfen
  while Assigned(aNode) do begin
    if AnsiUpperCase(aNode.Text) = aText then begin <<<<<<<<<<
      Result := True;
      Exit; // Break ginge auch, nächste aNode-Zuweisung würde verworfen
    end;
    aNode := aNode.getNextSibling;
  end;
end;
$2B or not $2B
  Mit Zitat antworten Zitat