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:
Kopiuj
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
public
zaznaczenie: string;
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
function TSearch.IsSlashChar(Path: String): String;
begin
if Path[Length(Path)] <> '' then
Result := Path + '' else Result := Path;
end;
function TSearch.FindIt(Dir: String; var Progress : Integer) : TStringList;
var
Found : Integer;
begin
Result := TStringList.Create;
try
Dir := IsSlashChar(Dir);
Found := FindFirst(Dir + '*.*', faAnyFile, SR);
while ( Found = 0 ) do
begin
if (SR.Name <> '.') and (SR.Name <> '..') then
Result.Add(Dir + SR.Name);
Found := FindNext(SR);
end;
finally
Form2.ListBox1.Items:=Result;
FindClose(SR);
end;
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;
I : Integer;
Dir: String;
begin
if OpenDialog1.Execute then
Dir:=OpenDialog1.GetNamePath;
Search := TSearch.Create;
try
ListBox1.Items.Assign(Search.FindIt(DirectoryListBox1.Directory, i));
finally
Search.Free;
end;
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ę:
Kopiuj
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 :/