Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Dateinamen in Array in Grid


whitef - Sa 26.12.15 23:44
Titel: Dateinamen in Array in Grid
hi,

ich versuche grade aus einem ordner alle dateinamen aufzulisten und in ein array zu schreiben und von dort aus wieder in ein grid.

irgendwie stehe ich gerade auf dem schlauch. irgendwas funktioniert da nicht...

wäre jemand so nett und würde mal drüber schauen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
    searchResult : TSearchRec;
    multiArray : Array of Array [1..6of WideString;
begin
  i := 0;
  stringgrid1.RowCount := i;
  SetLength(multiArray, 2);
    if FindFirst(ExtractFilePath(paramstr(0)) + 'data\' + '*.*', faAnyFile, searchResult) = 0 then
    begin
      repeat
        if ( searchResult.Name <> '.' ) and ( searchResult.Name <> '..' ) then
        begin
          multiArray[i,1] := searchResult.Name;
          SetLength(multiArray,  high(multiArray)+1);
          i := i + 1;
        end;
      until FindNext(searchResult) <> 0;
      FindClose(searchResult);
    end;

  stringgrid1.RowCount := high(multiArray)+1;
  if i > 0 then
  begin
    for i := low(multiArray) to high(multiArray) - 1 do
    begin
      stringgrid1.Cells[0,i+1] := multiArray[i,1];
      //showmessage('m: ' + multiArray[i,1]);
    end;
  end;
end;


Mathematiker - So 27.12.15 00:22

Hallo,
wenn du dein Programm um Debugger-Modus schrittweise ausführst, siehst du, dass

Delphi-Quelltext
1:
SetLength(multiArray,  high(multiArray)+1);                    

die Grenzen des Feldes nicht erweitert. high(multiarray) gibt dir nicht die Anzahl der Elemente, sondern die Anzahl - 1 zurück, da der erste Index = 0 ist.
Mit

Delphi-Quelltext
1:
setLength(multiArray, high(multiarray)+2);                    

funktioniert es.

Beste Grüße
Mathematiker

PS: Das war mein 2000.Beitrag. :dance2:


Martok - Mo 28.12.15 00:59

Oder du verwendest um die aktuelle Länge festzustellen Length(), damit macht das dann auch semantisch Sinn.


user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
PS: Das war mein 2000.Beitrag. :dance2:
Glückwunsch :beer: :)


whitef - Sa 09.01.16 10:05

danke...
eigentlich hatte ich das auch schon versucht... aber vlt an anderer stelle wieder was vertauscht :D