ich erforsche gerade Arrays und Zeiger mit folgendem code:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
PAdressRecord = ^TAdressRecord;
TAdressRecord = record
name : string;
ort : string;
plz : integer;
end;
{ TForm1 }
TForm1 = class(TForm)
cmdAuslesen: TButton;
cmdLaden: TButton;
procedure cmdLadenClick(Sender: TObject);
private
procedure DatenEintragen(pAdrRec: PAdressRecord);
procedure Datenaendern(pAdrRec: PAdressRecord);
procedure Datenlesen(pAdrRec: PAdressRecord);
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.cmdLadenClick(Sender: TObject);
var
aAdressen: Array of TAdressRecord;
pAdressen: PAdressRecord;
begin
SetLength(aAdressen, 2);
pAdressen := @aAdressen[0];
//Daten eintragen
Datenlesen(pAdressen);
DatenEintragen(pAdressen);
Datenlesen(pAdressen);
Datenaendern(pAdressen);
Datenlesen(pAdressen);
end;
procedure TForm1.DatenEintragen(pAdrRec: PAdressRecord);
var
iAnzahl : Integer = 0;
begin
pAdrRec[0].name := 'Hans';
pAdrRec[0].ort := 'Berlin';
pAdrRec[0].plz := 1020;
pAdrRec[1].name := 'Peter';
pAdrRec[1].ort := 'Bonn';
pAdrRec[1].plz := 3020;
end;
procedure TForm1.Datenlesen(pAdrRec: PAdressRecord);
var
sMeldung : string = '';
begin
sMeldung:= pAdrRec[0].name + ';' + IntToStr(pAdrRec[0].plz) + ';' + pAdrRec[0].ort + #13 +
pAdrRec[1].name + ';' + IntToStr(pAdrRec[1].plz) + ';' + pAdrRec[1].ort;
ShowMessage(sMeldung);
end;
procedure TForm1.Datenaendern(pAdrRec: PAdressRecord);
var
iAnzahl : Integer = 0;
begin
pAdrRec[0].plz:= 1022;
pAdrRec[1].plz:= 3022;
end;
end.
1) Wie kann man in der procedur 'Datenaendern' oder 'Datenlesen' die aktuellen Grenzen des Arrays aAdressen abfragen?
2) In der procedur 'cmdLadenClick' liegt das dyn. Array 'aAdressen' auf dem Stack. Wie kann man das machen, dass ich die
Daten des dyn. Array 'aAdressen' mit New() auf dem Heap liegen habe?
Danke für Eure Hilfe!
Vbxler