AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[VirtualTreeview]Items hinzufügen

Ein Thema von arbu man · begonnen am 1. Jun 2006 · letzter Beitrag vom 1. Jun 2006
Antwort Antwort
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#1

[VirtualTreeview]Items hinzufügen

  Alt 1. Jun 2006, 16:19
Hi,

Ich wollte grade wie in diesem Tutorial beschrieben Items in eine VST einfügen http://www.dsdt.info/tutorials/virtualtreeview/ leider kommt dabei eine Zugriffs verletzung

Was mache ich nur falsch ?

Delphi-Quellcode:
type
  TAI_TreeKind = (tkdic);

type
  PAI_TreeItem = ^TAI_TreeItem;
  TAI_TreeItem =record // meine daten
    kind: TAI_TreeKind;
    path: string[255];
    self: string[255];
  end;


// hier werden die items erstellt, bzw sollen erstellt werden
procedure TFEditorMain.TreeFilesExpanding(Sender: TBaseVirtualTree;
  Node: PVirtualNode; var Allowed: Boolean);
var
  slist: tstringlist;
  i: integer;
  rp: TAI_TreeItem;
begin
  if node = htdocs then begin
    TreeFiles.DeleteChildren(node);
    slist:= tstringlist.Create;
    slist:=Lister.listdirs(fhtdocs);
    TreeFiles.BeginUpdate;
    for i:=0 to slist.Count-1 do begin
      rp.path:= lister.path+slist[i];
      rp.self:= slist[i];
      TreeFiles.NodeDataSize:=SizeOf(TAI_TreeItem);
      AddVSTStructure(TreeFiles, node, rp);
    end;
    TreeFiles.EndUpdate;
  end;
end;

// diese function ist aus dem tutorial
function TFEditorMain.AddVSTStructure(AVST: TCustomVirtualStringTree;
  ANode: PVirtualNode; ARecord: TAI_TreeItem): PVirtualNode;
var
  Data: PAI_TreeItem;
begin
  Result:=AVST.AddChild(ANode);
  Data:=AVST.GetNodeData(Result);
  Avst.ValidateNode(Result, False);
  Data^.kind:=ARecord.kind;
  Data^.path:=ARecord.path;
  Data^.self:=ARecord.self;
end;

// Die Zugriffs verletzung kommt schon beim Expandieren
thx, arbu
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#2

Re: [VirtualTreeview]Items hinzufügen

  Alt 1. Jun 2006, 20:36
Hallo,

ich habe ein paar Kleinigkeiten gefunden.
Vielleicht ist ja die Fehlerursache dabei:

Delphi-Quellcode:
procedure TFEditorMain.TreeFilesExpanding(Sender: TBaseVirtualTree;
  Node: PVirtualNode; var Allowed: Boolean);
var
  slist: tstringlist;
  i: integer;
  rp: TAI_TreeItem;
begin
  if node = htdocs then begin
    TreeFiles.DeleteChildren(node);
    // Kommentiere diese Zeile mal aus. !!! Sie erzeugt ein Speicherleck.
    //slist:= tstringlist.Create;
    slist:=Lister.listdirs(fhtdocs);
    try
      TreeFiles.BeginUpdate;

      try

        for i:=0 to slist.Count-1 do begin
          rp.path:= lister.path+slist[i];
          rp.self:= slist[i];

          // NodeDataSize sollte nur einmal beim
          // Programmstart eingestellt werden.
          // Danach sollte sich NodeDataSize eigentlich nicht mehr ändern.
          TreeFiles.NodeDataSize:=SizeOf(TAI_TreeItem);
          AddVSTStructure(TreeFiles, node, rp);
        end; // for lk

      finally
        TreeFiles.EndUpdate;
      end; // finally

    finally
      FreeAndNil(slist);
    end;

  end; // if

end; // TreeFilesExpanding


function TFEditorMain.AddVSTStructure(AVST: TCustomVirtualStringTree;
  ANode: PVirtualNode; ARecord: TAI_TreeItem): PVirtualNode;
var
  Data: PAI_TreeItem;
begin
  Result:=AVST.AddChild(ANode);
  Data:=AVST.GetNodeData(Result);
  Avst.ValidateNode(Result, False);
  Data^.kind:=ARecord.kind;
  Data^.path:=ARecord.path;
  Data^.self:=ARecord.self;
end; // AddVSTStructure
Grüße,

pszopp
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

Registriert seit: 3. Nov 2004
Ort: Krefeld
1.108 Beiträge
 
Delphi 7 Professional
 
#3

Re: [VirtualTreeview]Items hinzufügen

  Alt 1. Jun 2006, 21:09
Delphi-Quellcode:
// NodeDataSize sollte nur einmal beim Programmstart eingestellt werden.
          // Danach sollte sich NodeDataSize eigentlich nicht mehr ändern.
          TreeFiles.NodeDataSize:=SizeOf(TAI_TreeItem);
genau daran lag es, aber danke

Ich muss schon sagen der VirtualStringTree ist cool.
Björn
>> http://bsnx.net <<
Virtual DP Stammtisch v1.0"iw" am 19.09.2007 - ich war dabei!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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