Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugrifffehler beim Verschieben von Einträgen eines TreeView (https://www.delphipraxis.net/94746-zugrifffehler-beim-verschieben-von-eintraegen-eines-treeview.html)

benst 26. Jun 2007 12:42


Zugrifffehler beim Verschieben von Einträgen eines TreeView
 
Hi ihr,

ich möchte Einträge in einem TreeView verschieben können. Dazu habe ich ein Popup-Menü mit folgenden Proceduren...
Delphi-Quellcode:
procedure TForm1.Hoch1Click(Sender: TObject);
begin
  if TreeView1.Selected<>nil then
    begin
    if TreeView1.Selected.Index > 0 then
      TreeView1.Selected.MoveTo(TreeView1.Selected.GetPrevSibling, naInsert)
    end
    else MessageDlg('Sie müssen zuerst einen Eintrag makieren.', mtInformation, [mbOk], 0);
end;

procedure TForm1.Runter1Click(Sender: TObject);
begin
  if TreeView1.Selected<>nil then
    begin
    if TreeView1.Selected.Index < TreeView1.Selected.Parent.Count-1 then
      TreeView1.Selected.GetNextSibling.MoveTo(TreeView1.Selected, naInsert)
    end
    else MessageDlg('Sie müssen zuerst einen Eintrag makieren.', mtInformation, [mbOk], 0);
end;
Die erste Procedure funktioniert wie gewünscht. Die zweite funktioniert nur in unter Unterzweigen, also nicht in höchster Ebene. Mir ist jedoch unklar, warum es zu einem Zugriffsfehler kommt. Hat jemand eine Idee und ggf. einen Lösungsvorschlag?

Gruß
Ben
P.S.: Delphi 5 Standard

Niko 26. Jun 2007 13:17

Re: Zugrifffehler beim Verschieben von Einträgen eines TreeV
 
Hi,

wahrscheinlich ist "TreeView1.Selected.Parent" auf hoechster Ebene nil.

benst 26. Jun 2007 17:57

Re: Zugrifffehler beim Verschieben von Einträgen eines TreeV
 
Stimmt, da ist der Fehler. Danke.
Habe schon in der Hilfe umgesucht, aber ich finde keine geschickte Möglichkeit, die Anzahl der Elemente in oberster Ebene zu bekommen.
TreeView1.Count gibt es nicht und TreeView1.Items.Count spuckt die Gesamtanzahl von Elementen aus.

Gruß
Ben

Muetze1 26. Jun 2007 19:16

Re: Zugrifffehler beim Verschieben von Einträgen eines TreeV
 
Zitat:

Zitat von benst
Habe schon in der Hilfe umgesucht, aber ich finde keine geschickte Möglichkeit, die Anzahl der Elemente in oberster Ebene zu bekommen.

Einfach iterieren?

Delphi-Quellcode:
function NodeLevelCounter(const AItems: TTreeNodes): Integer;
var
  lNode: TTreeNode;
begin
  result := 0;

  lNode := AItems.GetFirstNode;
  while assigned(lNode) do
  begin
    Inc(Result);
    lNode := lNode.getNextSibling;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := IntToStr(NodeLevelCounter(TreeView1.Items));
end;

benst 26. Jun 2007 20:17

Re: Zugrifffehler beim Verschieben von Einträgen eines TreeV
 
Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz