14. maj 2004 - 19:56
Der er
1 kommentar og
1 løsning
Oprydning efter var arrays
var
list: array of record
col: array of string;
obj: array of integer;
end;
Jeg bruger det i forbindelse med at gemme et advStr-grid(tms) midlertidigt. Og jeg har brug for det helt dynamiske som ligger i det.
Men når jeg er færdig er det så nok at lave en setLength(list,0) eller skal alle i list løbes igennem og så: setLength(list[i].obj/col,0) for at der ryddes helt op?
Lavede dette lille testprogram og det ser ud til at setlength(list,0) er tilstrækkeligt. Du kan evt. prøve videre for dig selv. Formen består af 4 knapper samt 1 listview i report mode og 7 kolonner.
type
TfrmMain = class(TForm)
btnTest: TButton;
btnAllocate: TButton;
btnFree1: TButton;
btnFree3: TButton;
lvLog: TListView;
procedure btnTestClick(Sender: TObject);
procedure btnAllocateClick(Sender: TObject);
procedure btnFree1Click(Sender: TObject);
procedure btnFree3Click(Sender: TObject);
private
public
end;
var
list: array of record
col: array of string;
obj: array of integer;
end;
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnTestClick(Sender: TObject);
var
MemRec : _MEMORYSTATUS;
begin
GlobalMemoryStatus(MemRec);
with lvLog.Items.Add do begin
SubItems.Add(IntToStr(MemRec.dwTotalPhys));
SubItems.Add(IntToStr(MemRec.dwAvailPhys));
SubItems.Add(IntToStr(MemRec.dwTotalVirtual));
SubItems.Add(IntToStr(MemRec.dwAvailVirtual));
SubItems.Add(IntToStr(MemRec.dwTotalPageFile));
SubItems.Add(IntToStr(MemRec.dwAvailPageFile));
Caption := IntToStr(MemRec.dwMemoryLoad);
end;
end;
procedure TfrmMain.btnAllocateClick(Sender: TObject);
var
i : integer;
begin
Screen.Cursor := crHourglass;
try
SetLength(list,10000);
for i := low(list) to high(list) do begin
SetLength(List[i].col,1000);
SetLength(List[i].obj,1000);
end;
finally
Screen.Cursor := crDefault;
end;
end;
procedure TfrmMain.btnFree1Click(Sender: TObject);
begin
SetLength(list,0);
end;
procedure TfrmMain.btnFree3Click(Sender: TObject);
var
i : integer;
begin
Screen.Cursor := crHourglass;
try
// Prøvede begge veje. Nedefra og op gjorde ingen forskel
for i := high(list) downto low(list) do begin
SetLength(List[i].col,0);
SetLength(List[i].obj,0);
end;
SetLength(list,0);
finally
Screen.Cursor := crDefault;
end;
end;