Avatar billede nop Nybegynder
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?
Avatar billede hrc Mester
14. maj 2004 - 22:59 #1
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;
Avatar billede nop Nybegynder
15. maj 2004 - 22:55 #2
Det var virkelig noget jeg kunne bruge til noget, tak.
--nop
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester