Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Virtual Tree - "Ungültige Zeigeroperation" beim Leeren (https://www.delphipraxis.net/131737-virtual-tree-ungueltige-zeigeroperation-beim-leeren.html)

BenniP 30. Mär 2009 09:27


Virtual Tree - "Ungültige Zeigeroperation" beim Le
 
Hallo,

ich habe folgendes Problem,
ich hab ein Treeview der einen Record hat mit einem String und einem Index. Der String wird als CellText verwendet, der Index wird intern verwendet.

Mein Record
Delphi-Quellcode:
type
  PBaumDaten = ^RBaumDaten;
  RBaumDaten = Record
    Text: String;
    Index: Integer;
end;
Die Initialisierung sieht so aus:
Delphi-Quellcode:
procedure TForm1.vstErgebnisGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
 NodeDataSize:= SizeOf(PBaumDaten);
end;
Freigabe der Daten:
Delphi-Quellcode:
procedure TForm1.vstErgebnisFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
Var pDaten: PBaumDaten;
begin
 pDaten:= vstErgebnis.GetNodeData(Node);
 If Assigned(pDaten) Then
 Begin
  pDaten.Text:= '';
  pDaten.Index:= 0;
 End; //If
end;
CellText zuweisen:
Delphi-Quellcode:
procedure TForm1.vstErgebnisGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
Var pDaten: PBaumDaten;
begin
 pDaten:= Sender.GetNodeData(Node);
 If Assigned(pDaten) Then
  CellText:= pDaten.Text;
end;


Beim leeren (.Clear) tritt der Fehler "Ungültige Zeigeroperation" auf, beim Anhalten springt Delphi zu folgender Zeile im VirtualTree Source:
Delphi-Quellcode:
procedure TCustomVirtualStringTree.DefineProperties(Filer: TFiler);
Virtual Tree 4.8.5
Delphi 2007

Ich komme nicht mehr weiter und weiß nicht wo mein Fehler liegt.
Kann mir jemand helfen?

Besten Dank!

madas 30. Mär 2009 10:34

Re: Virtual Tree - "Ungültige Zeigeroperation" bei
 
Probiere mal:

Delphi-Quellcode:
procedure TForm1.vstErgebnisGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
NodeDataSize:= SizeOf(RBaumDaten);
end;

BenniP 30. Mär 2009 11:16

Re: Virtual Tree - "Ungültige Zeigeroperation" bei
 
Oh nein! :wall:

VIELEN vielen Dank!

Ah! Was für ein Brett vorm Kopf! :oops: :)

hoika 30. Mär 2009 12:01

Re: Virtual Tree - "Ungültige Zeigeroperation" bei
 
Hallo,

trotzdem sieht dein OnFreeNode komisch aus.
Muss man dort nicht den Pointer auch freigeben ?

Was sagt denn FastMM4 oder memcheck dazu ?

Ausserdem stimmt SizeOf(P) (4 Byte) eigentlich,
wenn du in das Data-Feld des VcNode den Pointer
und nicht den Record packst.


Heiko

generic 30. Mär 2009 12:32

Re: Virtual Tree - "Ungültige Zeigeroperation" bei
 
FreeNode sieht eigentlich gut aus.

Der String wird auf "", wegen dem Speicherproblem mit HugeString und fertig.
Das index=0 muss nicht sein.

BenniP 30. Mär 2009 12:48

Re: Virtual Tree - "Ungültige Zeigeroperation" bei
 
Naja, wie sollte den die OnFree-Procedure aussehen?

Das was dort steht hab ich aus einem Tutorial (delphi-treff) übernommen.
Ausgenommen dem geistigen Ausrutscher mit SizeOf.

FastMM probier ich nachher, bin grad nicht an meinem Rechner.

hoika 30. Mär 2009 13:07

Re: Virtual Tree - "Ungültige Zeigeroperation" bei
 
Hallo,

Was hast du im OnNodeInit (oder wie auch immer du den Tree initialisiert) gesetzt.


Heiko

BenniP 30. Mär 2009 13:10

Re: Virtual Tree - "Ungültige Zeigeroperation" bei
 
Ähm. Nichts, ich kannte die procedure bis eben noch nicht mal.

Was gehört dort rein?
-Größe des Records ist ja schon bekannt.
-...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 Uhr.

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