Dodawanie nazw plików do ListBoxa

0

Witajcie.
Jestem początkujący więc wybaczcie błahe pytanie.
Jak do ListBoxa dodać nazwy wszystkich plików z danego folderu bo kombinuje topornie.
Najlepiej gdyby szło zrobić tak by dodawał tylko te o określonym rozszerzeniu np. .txt

procedure TForm1.Button1Click(Sender: TObject);
var
 nazwa:string ;
 dir:string;
   begin

    if SelectDirectory('Katalog','d:\',nazwa)
      then listbox1.items.add(ExtractFileName(dir));

   end;  
1

Takie najbardziej typowe rozwiązanie to użycie funkcji FindFirst i FindNext:

var
  LFileRec: TSearchRec;
begin
  if FindFirst('C:\Some Dir\*.txt', faAnyFile, LFileRec) = 0 then
  try
    repeat
      ListBox.Items.Add(LFileRec.Name);
    until FindNext(LFileRec) <> 0;
  finally
    FindClose(LFileRec);
  end;
end;

Są jeszcze inne rozwiązania w razie czego.

0

szło by to jakoś powiązać z:

SelectDirectory('Katalog','d:\*.txt',nazwa)

chodzi mi by ścieżkę do folderu podawać już w uruchomionym programie a nie w kodzie źródłowym, mam na razie za małą wiedzę by to ogarnąć i czacha już dymi :)

Dziękuję za każdą okazaną pomoc

1

Sądziłem, że masz zamiar zrobić coś sam...

Funkcja SelectDirectory zwraca True, jeśli użytkownik faktycznie wybrał jakiś katalog; Wtedy też w parametrze Directory zwracana jest ścieżka katalogu - użyj tej ścieżki do budowy ciągu wzorca dla funkcji FindFirst.

0

sorki że zawracam dupę ale samemu zajmie mi to kilka dni zajmie :)

Wiem że to niżej nie ma racji bytu robię już na chybił trafił gdyż to są moje pierwsze kroki nie czekam na gotowca ale miło by było :)
zaraz wyrzucę kompa przez okno :)

Wystarczą podpowiedzi ale bardziej łopatologiczne,
nie wiem, może muszę dodać funkcję ale wszystko mi się teraz miesza

rocedure TForm1.Button1Click(Sender: TObject);
var
Directory:string;
LFileRec: TSearchRec;
begin
   if SelectDirectory('Wybierz Katalog','c:\',Directory) then
   begin
    if FindFirst ('Directory*.txt', faAnyFile, LFileRec) = 0 then
  try
    repeat
      ListBox1.Items.Add(LFileRec.Name);
    until FindNext(LFileRec) <> 0;
  finally
    FindClose(LFileRec);
  end;
end;
end;

end.
0

wypiłem bronka za wasze zdrowie dzięki za pomoc
dodałem procedurę wyszło mi coś takiego poniżej.
Nie mam pojęcia czy to też ma racje bytu bo wywala mi błąd w jednej linii:

ListBox1.Items.Add(SR.Name);
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  procedure ListFileDir(Path: String; FileList: TStrings);


  implementation

{$R *.dfm}

 procedure Listbox(Path: String; FileList: TStrings);
  var
   SR: TSearchRec;

begin
  if FindFirst(path+ '*.txt', faAnyFile, SR) = 0 then
  try
    repeat
      ListBox1.Items.Add(SR.Name);
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);

 var
 Dir: String;

begin
  SelectDirectory('Select a directory', 'F:', Dir);
  Listbox(Dir, ListBox1.Items);
end;

end.

a oto błędy:

[dcc32 Warning] Unit1.pas(7): W1005 Unit 'Vcl.FileCtrl' is specific to a platform
[dcc32 Error] Unit1.pas(35): E2003 Undeclared identifier: 'ListBox1'
[dcc32 Error] Unit1.pas(35): E2066 Missing operator or semicolon
[dcc32 Fatal Error] Project1.dpr(5): F2063 Could not compile used unit 'Unit1.pas'
0

Przecież Ty w ogóle nie znasz podstaw języka, to jak chcesz ten program napisać?

[dcc32 Warning] Unit1.pas(7): W1005 Unit 'Vcl.FileCtrl' is specific to a platform

Zobacz do tego posta - http://4programmers.net/Forum/1309236

[dcc32 Error] Unit1.pas(35): E2003 Undeclared identifier: 'ListBox1'

Z poziomu globalnej procedury nie masz bezpośredniego dostępu do komponentów formularza; Albo zadeklaruj swoją procedurę wewnątrz klasy okna, albo odnoś się do komponentu na podstawie nazwy obiektu formularza, czyli np. MainForm.ListBox;

Masz:

procedure ListFiles(const APath: String; AFilesList: TStrings);
var
  LFileRec: TSearchRec;
begin
  AFilesList.Clear();

  if FindFirst(APath + '*.txt', faAnyFile, LFileRec) = 0 then
  try
    repeat
      AFilesList.Add(LFileRec.Name);
    until FindNext(LFileRec) <> 0;
  finally
    FindClose(LFileRec);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LDirectory: String;
begin
  if SelectDirectory('Select directory', LDirectory) then
    ListFiles(IncludeTrailingPathDelimiter(LDirectory), ListBox1.Items);
end;
0

Tak masz rację.
Właśnie w ten sposób się uczę
jestem praktykiem uczę się coś robiąc tylko tak mi teoria wejdzie,
czasami a raczej na pewno to innych w kurza za co przepraszam
ale więcej się nauczyłem przez dwa dni z Twoją Pomocą za co (szacun)
niż bym książkę do Delphi przerobił bo próbowałem.
Browar Ci się należy
DŹIĘKUJĘ

1 użytkowników online, w tym zalogowanych: 0, gości: 1