Teraz przypomniało mi się, że już nie raz korzystałem z funkcji Format^^ Zwyczajnie z głowy wyleciało. Niemniej wszystko śmiga tak jak powinno :)
puchi jeśli chodzi o to obciążanie procesora, to źle się wyraziłem. Bo ciężko jest mówić o zamulaniu procka w przypadku takiego prostego kodu :]
A teraz kolejne pytanie. Wracam do wcześniejszego zapytania o wczytywanie całego folderu. Skorzystałem z waszych podpowiedzi i zmodyfikowałem nieco kod z linków i wyszło cosik takiego:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ActnList, FileCtrl;
type
TSearch = class
private
SR : TSearchRec;
function IsSlashChar(Path : String) : String;
public
function FindIt(Dir : String; var Progress : Integer) : TStringList;
end;
type
TForm2 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
ListBox2: TListBox;
DirectoryListBox1: TDirectoryListBox;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ListBox2Click(Sender: TObject);
private
{ Private declarations }
public
zaznaczenie: string;
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
function TSearch.IsSlashChar(Path: String): String;
begin
{
Funkcja sprawdza, czy ostatnim znakiem zmiennej "Path" nie jest znak \. Jezeli nie jest to ten znak jest dodwany.
}
if Path[Length(Path)] <> '' then
Result := Path + '' else Result := Path;
end;
function TSearch.FindIt(Dir: String; var Progress : Integer) : TStringList;
var
Found : Integer; // zmienna przechowuje ilosc znalezionych plikow
begin
{
Rezultatem tej funkcji jest zmienna typu "TStringList", ktora zawierac
bedzie liste plikow, ktore zostaly odnalezione.
}
Result := TStringList.Create; // stworz zmienna
try
// wywolaj funkcje, ktora sprawdza, czy na koncu zmiennej "Dir" jest znak ""
Dir := IsSlashChar(Dir);
Found := FindFirst(Dir + '*.*', faAnyFile, SR); // odnajdz pliki
while ( Found = 0 ) do //dopoki liczba znalezionych plikow nie bedzie rowna 0
begin
{
Ponizsza instrukcja odpowiada za to, zeby do listy znalezionych plikow nie
dodawana byla nazwa '.' ani '..' ktore to oznaczaja, ze istnieje katalog
wyzej.
}
if (SR.Name <> '.') and (SR.Name <> '..') then
// do listy "TStringList" dodaj nazwe znalezionego pliku
Result.Add(Dir + SR.Name);
Found := FindNext(SR); // szukaj dalej...
end;
finally
Form2.ListBox1.Items:=Result;
FindClose(SR); // zakoncz przeszukiwanie
end;
{
Ah. Bylbym zapomnial o opisaniu zmiennej "Process" w tej funkcji. Otoz ta zmienna zawiera 'informacje' o stanie postepu w odnajdywaniu plikow.}
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
ListBox1.Items.Text:=OpenDialog1.FileName;
ListBox2.Items.Text:=ExtractFileName(ListBox1.Items.Text);
end;
end;
procedure TForm2.Button1Click(Sender: TObject);
var
Search : TSearch; // wskazuje na nowa klase
I : Integer;
Dir: String;
begin
if OpenDialog1.Execute then
Dir:=OpenDialog1.GetNamePath;
//OpenDialog1.GetNamePath
Search := TSearch.Create; // stworz klase
try
// do komponentu dodawana jest lista z funkcji "FindIt"
ListBox1.Items.Assign(Search.FindIt(DirectoryListBox1.Directory, i));
// postep w odnajdywaniu pliku przestawiany jest na komponencie "progrssbar"
finally
Search.Free; // uwolnij zmienna
end;
end;
(*if OpenDialog1.Execute then
begin
ListBox1.Items.Add(OpenDialog1.FileName);
ListBox2.Items.Add(ExtractFileName(ListBox1.Items.Text));
end;*)
procedure TForm2.ListBox2Click(Sender: TObject);
begin
ListBox1.ItemIndex:=ListBox2.ItemIndex;
zaznaczenie:=ListBox1.Items.Strings[ListBox2.ItemIndex];
Form1.MediaPlayer1.FileName:=Form2.zaznaczenie;
end;
end.
Korzystam tutaj z OpenDialoga by wczytać z niego ścieżkę folderu, ale chyba popełniam błąd wykorzystując do tego właśnie ten komponent. Używam OD ponieważ okienko wyboru folderu powinno pojawiać się po kliknięciu przycisku i chciałbym by wyglądało ono właśnie jak OD, a nie jak Directory/File ListBox :/ Jeśli jest jakiś inny komponent który będzie wyglądał jak OD i będę mógł z niego wyciągnąć ścieżkę folderu lub coś takiego jest możliwe w OD, to proszę podpowiedzcie coś :D
EDIT:
Acha i jeszcze jedna sprawa. Nie wiedziałem gdzie w kodzie przypisuje się wartość do zmiennej Dir, dlatego przy wywoływaniu funkcji dałem taką linijkę:
if OpenDialog1.Execute then
Dir:=OpenDialog1.GetNamePath;
nawet dokładnie nie wiem do czego służy GetNamePath, ale skojarzyłem po nazwie, że do przechwytywania ścieżki, tyle że w tym wypadku to pewnie ścieżka pliku, a nie folderu :/