Einzelnen Beitrag anzeigen

hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Pointer wirrwarr. Bitte um hilfe

  Alt 4. Feb 2016, 22:32
Hallo zusammen

Dieser Code war meine Grundlage:
Delphi-Quellcode:
type
  TTreeData = record
    FCaption: string;
    FColumn1: string;
  end;
  PTreeData = ^TTreeData;
...
procedure TForm1.Button2Click(Sender: TObject);
var
  Node : PVirtualNode;
  Data:PTreeData;
begin

  //Data ist nur ein Pointer auf eine Datenstruktur von TTreeData;
  vst.BeginUpdate;

  //Zuerst holen wir uns den Node
  Node := VST.AddChild(nil);

  //VST kennt bereits die grösse der Struktur und hat hier genau soviel Speicher bereit gestellt
  //Wir übergeben Data nun die Adresse des Speichers von VST.
  Data := vst.GetNodeData(node);

  //Nun können wir direkt in den Node Speicher hinein schreiben.
  Data^.FCaption := 'Test';
  Data^.FColumn1 := 'Column';

  vst.EndUpdate;

end;
Wie man erkennen kann, handelt es sich um VirtualTreeView.


Ich habe nun versucht anstelle des Records ein dynamisches array bestehend aus strings zu benutzen.
Dazu habe ich folgendes versucht:


Delphi-Quellcode:
type
  TsqlData = array of string;
  PsqlData = ^TsqlData;

...


function TeVCLqueryTable.Query(Query: string):integer;
var
  row,col:integer;
  node:PVirtualNode;
  sqlData:PsqlData;
begin
  FMySQL.Query(Query);

  //SQLColCount ist 11
  for col := 0 to FMySQL.SQLColCount - 1 do begin
    FVST.Header.Columns.Add;
  end;

  FVST.BeginUpdate;
 
  SetLength(sqlData^,FMySQL.SQLColCount); //SQLColCount ist 11
  FVST.NodeDataSize := sizeof(sqlData);

  node := FVST.AddChild(nil);
  sqlData := FVST.GetNodeData(node);

  sqlData^[0] := 'Test'; //<-- Hier kommt eine exception

  Result := FMySQL.SQLRowCount;

  FVST.EndUpdate;
end;


Ich wäre froh, wenn mir hier jemand weiterhelfen könnte.

Es geht um das Problem mit den Pointern.
Irgendwas mache ich falsch ^^

Danke
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat