Also irgendwie bin ich scheinba zu doof da zu.
Diese ganzen Möglichkeiten von Records, Objecten oder Objecten mit Records, hat mich total durcheinander gebracht.
Ich poste Euch jetzt nochmal, meinen zur Zeit aktiven geamten Code der das VST angeht. Vieleicht, kann mir da dann ja mal jemand dran erklären, wo mein Fehler ist, und vorallem warum.
Delphi-Quellcode:
//Wird so in der Funktion aufgerufen, die meine Daten verwaltet.
QryMB256PLUS.Close;
QryMB256PLUS.SQL.Text := 'SELECT * FROM MB256PLUS';//'SELECT * FROM MB256PLUS';
QryMB256PLUS.Open;
Form1.VSTfüllen; //Eigene Procedure
end;
procedure TForm1.VSTfüllen;
var
Daten : TOMB256PLUS;
begin
if not QRYMB256PLUS.Active then
QRYMB256PLUS.Open;
QRYMB256PLUS.filtered := false;
QRYMB256PLUS.filter := '';
VST.BeginUpdate;
VST.Clear;
VST.NodeDataSize := Sizeof(TOMB256PLUS);
Daten := TOMB256PLUS.Create;
QRYMB256PLUS.First;
VST.RootNodeCount := QRYMB256PLUS.RecordCount;
VST.SortTree(0,sdAscending,true);
VST.EndUpdate;
end;
{Größe vom Objekt dem VST zuweisen}
procedure TForm1.VSTGetNodeDataSize(Sender: TBaseVirtualTree;
var NodeDataSize: Integer);
begin
VST.NodeDataSize := SizeOf(TOMB256PLUS);
end;
{Werte dem VST zuweisen}
procedure TForm1.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
Daten : TOMB256PLUS;
begin
//Daten := TOMB256PLUS.Create;
Daten := TOMB256PLUS(VST.GetNodeData(Node)^);
case Column of
0: CellText:= IntToStr(Daten.ID);
1: CellText:= IntToStr(Daten.LfdNr);
2: CellText:= Daten.Datum;
3: CellText:= Daten.Uhrzeit;
4: CellText:= Daten.Ereignis;
5: CellText:= Daten.Teilnehmer;
6: CellText:= Daten.Bereich;
end;
end;
procedure TForm1.VSTInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
Daten : TOMB256PLUS;
begin
Daten.ID := QRYMB256PLUS.FieldByName('ID').AsInteger;
Daten.LfdNr := QRYMB256PLUS.FieldByName('LfdNr').AsInteger;
Daten.Datum := QRYMB256PLUS.FieldByName('Datum').AsString;
Daten.Uhrzeit := QRYMB256PLUS.FieldByName('Uhrzeit').AsString;
Daten.Ereignis := QRYMB256PLUS.FieldByName('Ereignis').AsString;
Daten.Teilnehmer := QRYMB256PLUS.FieldByName('Teilnehmer').AsString;
Daten.Bereich := QRYMB256PLUS.FieldByName('Bereich').AsString;
end;
procedure TForm1.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
Daten : TOMB256PLUS;
begin
Daten := TOMB256PLUS(VST.GetNodeData(Node)^);
Daten.Free;
end;
Das müssten alle Funktionen sein.