Pffffff ... das ist ja noch mal gutgegangen
Zu früh gefreut ... Jetzt kommt schon im Projekt-Quelltext ein Fehler:
Code:
Im Projekt ... ist eine
Exception der Klasse EReadError mit der Meldung 'Ungültiger Eigenschaftswert' aufgetreten.
Ausgelöst wird er hier:
Application.CreateForm(TFormCode, FormCode);
Behoben hab ich diesen Fehler, indem ich – wie anfangs geahnt – die VST-Komponente neu aufs Form gepflanzt und alle benötigten Einstellungen wieder hergestellt habe.
Doch damit der Friede noch nicht wieder hergestellt. Nun hab ich einen Laufzeitfehler:
Im Projekt PCH_PROCODE.exe ist eine
Exception der Klasse EAssertionFailed mit der Meldung 'NodeDataSize not initialized. (D:\Programme\Coding\
RAD Studio\6.0\lib\Virtual Treeview\Source\VirtualTrees.pas, Zeile 29472)' aufgetreten.
Ausgelöst wird die
Exception beim Versuch, das erste Mal GetData aufzurufen:
Delphi-Quellcode:
procedure TFormCode.Einlesen_Sprachen;
VAR
Data : PNodeData;
Node : PVirtualNode;
Anzahl,
Index : Integer;
Sprache : String;
Expandiert : Boolean;
begin
DatMod.Dset_Sprache.First;
VST.Clear;
VST.BeginUpdate;
WHILE NOT DatMod.Dset_Sprache.Eof DO
BEGIN
Index := DatMod.Dset_Sprache.FieldByName('IDX_CODESPRACHE').AsInteger;
Anzahl := DatMod.Dset_Sprache.FieldByName('ANZAHL_CODE').AsInteger;
Sprache := DatMod.Dset_Sprache.FieldByName('SPRACHE').AsString;
Expandiert := DatMod.Dset_Sprache.FieldByName('EXPANDIERT').AsBoolean;
Node := VST.AddChild(VST.RootNode);
Data := VST.GetNodeData(Node); // hier knallt's
Data.Index := Index;
Data.Eltern := 0;
Data.Titel := Sprache;
Data.Anzahl := Anzahl;
VST.Expanded[Node] := Expandiert;
DatMod.Dset_Sprache.Next;
END;
VST.EndUpdate;
end;
Dabei hab ich an meinen NodeDatasizes gar nichts verändert:
Delphi-Quellcode:
unit UnitCode;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, ... ;
TYPE
PNodeData = ^TNodeData;
TNodeData =
RECORD
Titel :
String;
Eltern : Integer;
Index : Integer;
Anzahl : Integer;
END;
CONST
SizeNodeData = SizeOf(TNodeData);
Ebenso wenig wie an denn beiden entsprechenden Proceduren
Delphi-Quellcode:
procedure TFormCode.VSTGetNodeDataSize(Sender: TBaseVirtualTree; var NodeDataSize: Integer);
begin
NodeDataSize := SizeNodeData;
end;
procedure TFormCode.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
VAR
Data : PNodeData;
begin
Data := Sender.GetNodeData(Node);
CASE Column OF
0 : CellText := Data.Titel;
1 : IF Data.Anzahl > 0 THEN
CellText := IntToStr(Data.Anzahl) ELSE
CellText := '';
END;
end;