Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Problem gelöst

  Alt 20. Jul 2012, 19:11
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;
  Mit Zitat antworten Zitat