Witam znowu,
chcialem oprogramowac sobie ListView zeby dziala w stylu ShellListView tylko troche biednej :) - NO COMMENTS - wiec robie nastepujaca rzecz:
procedure TForm1.Geticon(sciezka:string);
var Ico : PShFileInfo;
begin
GetMem(Ico, sizeof(TShFileInfo) );
try
ImageList1.Handle := shGetFileInfo(PChar(sciezka), 0, Ico^, sizeof(TShFileInfo), shgfi_sysiconindex or shgfi_icon or shgfi_smallicon);
ListView1.Items.Add.ImageIndex := Ico.iIcon;
finally
FreeMem(ico);
end;
end;
procedure TForm1.Szukaj;
var SearchRec:TSearchRec;
Dir: TSHFileInfo;
begin
ListView1.Clear;
If FindFirst(sciezka+'*.*',faAnyFile,SearchRec)= 0 then
begin
Repeat
If ((SearchRec.Attr and faDirectory)=16) and (SearchRec.Name <> '.') then
begin
GetIcon(sciezka+SearchRec.name);
end;
If (SearchRec.Attr <> faDirectory)then
begin
Application.ProcessMessages;
GetIcon(sciezka+SearchRec.name);
Edit2.Text := IntTOStr(ListView1.Items.Count);
end;
Edit3.Text := IntTOStr(ImageList1.Count);
Until FindNext(SearchRec) <>0;
end;
wszystko ladnie dziala ALE jesli za sciezke przyjmiemy np. system32 w ktorym jest ok 2180 plikow to program zaczyna MIELIC ze procesor sie pali :-/ - no moze bez przesady.
Czy moze da sie to zrobic szybciej? tzn. zmniejszyc czas zwloki na wyswietlenie ikon ??
P.S. Odpowiedzi typu: ShellListView jest lepszyto po co sie meczysz - odpadaja ;-) z konkursu