Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei neuem Eintrag einer TreeView (https://www.delphipraxis.net/57251-fehler-bei-neuem-eintrag-einer-treeview.html)

-NIP- 17. Nov 2005 19:51


Fehler bei neuem Eintrag einer TreeView
 
Hi!

In meinem Programm gibt es immer eine AV, wenn ich folgenden Code auslöse:
Delphi-Quellcode:
  GroupCount:= GroupCount+1;

  S3DObjekt.AddGroup('Gruppe '+IntToStr(GroupCount),true);
  //In Zeile unter dem Kommentar kommt Fehler
  with ObjectsTreeTV.Items.AddChildFirst(ObjectsTreeTV.Selected,'Gruppe '+IntToStr(GroupCount)) do
  begin
    ImageIndex:= 1;
    MakeVisible;
    SelectedIndex:= 1;
    Data:= S3DObjekt.Groups[Length(S3DObjekt.Groups)];
  end;
TreeViewKomponente = ObjectsTreeTV

Wenn ich die "AddGroup"-Prozedur nicht ausführe kommt der Fehler nicht.
Die AddGroup-Prozedur sieht so aus:
Delphi-Quellcode:
//In dieser Prozedur kommt kein Fehler beim Ausführen
procedure TS3DObject.AddGroup(Name:String; Visible: Boolean);
begin
  SetLength(self.Groups,Length(self.Groups)+1);
  self.Groups[Length(self.Groups)].Create;
  self.Groups[Length(self.Groups)].Visible:= Visible;
  self.Groups[Length(self.Groups)].Name:= Name;
end;
Groups ist ein dynamisches Array.

Habt ihr vllt. eine Idee?

tigerman33 17. Nov 2005 20:21

Re: Fehler bei neuem Eintrag einer TreeView
 
Schuss ins Blaue: Ist Selected vielleicht nil?

Khabarakh 17. Nov 2005 20:25

Re: Fehler bei neuem Eintrag einer TreeView
 
Zitat:

Delphi-Quellcode:
self.Groups[Length(self.Groups)].Create;

:stupid: Du willst eine Instanz an einer Speicherstelle, die zu einer hohen Wahrscheinlichkeit nicht dir gehört, in einem Arrayitem, das nicht existiert, speichern.
Delphi-Quellcode:
Groups[High(Groups)] := TGroup.Create;

-NIP- 17. Nov 2005 20:48

Re: Fehler bei neuem Eintrag einer TreeView
 
Wenn ich den Code aber in diesen umwandle, kommt der selbe Fehler:

Delphi-Quellcode:
procedure TS3DObject.AddGroup(Name:String; Visible: Boolean);
begin
  SetLength(self.Groups,High(self.Groups));
  self.Groups[High(self.Groups)]:= TS3DGroup.Create;
  self.Groups[High(self.Groups)].Visible:= Visible;
  self.Groups[High(self.Groups)].Name:= Name;
end;
Selected ist nicht nil.

Flocke 17. Nov 2005 21:10

Re: Fehler bei neuem Eintrag einer TreeView
 
Das Length+1 beim SetLength war ja auch richtig, du musst nur bei den Indizes High benutzen.

Delphi-Quellcode:
procedure TS3DObject.AddGroup(Name:String; Visible: Boolean);
begin
  SetLength(self.Groups,Length(self.Groups)+1);
  self.Groups[High(self.Groups)]:= TS3DGroup.Create;
  self.Groups[High(self.Groups)].Visible:= Visible;
  self.Groups[High(self.Groups)].Name:= Name;
end;

-NIP- 17. Nov 2005 21:25

Re: Fehler bei neuem Eintrag einer TreeView
 
Danke, das klappt jetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 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