Ikonki

0

Witam,
mam sobie taką procedurkę do FormCreate-a:

var
Ico : PShFileInfo;
begin
ImageList1.Handle := ShGetFileInfo(PChar('plik'), 0, Ico, sizeof(TShFileInfo), SHGFI_SYSICONINDEX OR SHGFI_ICON OR SHGFI_SMALLICON);
Image1.Picture.Icon.Handle:=Ico.hIcon;
ImageList1.ShareImages := TRUE;
ListView1.Selected.ImageIndex := Ico.iIcon;
end; 

Podczas gdy kompiluje program wywala błąd:

user image

Po kliknieciu na OK włącza się, ale nic nie dziala ;-(. Czy wie ktoś co jest źle??

Pozdr,
Red Hot

0

A istnieje plik o nazwie "plik", ma w zasobach ikone, i czy jest w tym samym folderze co program?

0

[code]ListView1.Selected.ImageIndex := Ico.iIcon;[/code]

Najpierw sprawdz czy cos jest zaznaczone.

//mm no tak

0

[code]ListView1.Selected.ImageIndex := Ico.iIcon;[/code]
Najpierw sprawdz czy cos jest zaznaczone.

Wtedy by wyskoczylo:
'(blablabla)
List index out of Bound (-1)
(blablabla)';
:-P

//poza tym sprawdz, czy dziala w np. OnClick jakiegos buttona...

0
  1. Używaj debuggera
  2. Zobacz czy ListView ma we właściwości 'SmallImages' lub 'LargeImages' wybrany komponent 'ImageList1'
  3. Sprawdź czy jakikolwiek Item w ListView został wybrany
0

Pokombinowałem i poszło. Tylko, że wyświetla mi ikonkę w Image-u, a ja chce jeżeli jest plik o danym rozszerzeniu (w ListView-ie) to żeby wybierał do niego odpowiednią ikonkę. Czy da się to zrobić??

0

Wszystko sie da. Mozesz np wyciagnac to rozszerzenie i zrobic kilka if'ow, potem albo wyciagnac systemowe ikonki, albo ustawic jakies wlasne.

0

Mógłbyś Mi pomóc bo nie jestem w tym najlepszy?? Może jakaś procedurka??

0

Procedurka do czego? Wyciagania rozszerzenia: byl o tym temat na forum, wyciaganie ikony: Poszukaj na torry w dziale tips.

A jesli nie chce ci sie bawic z systemowymi ikonami to mozesz po prostu wrzucic jakiegos ImageList, w nim ikonki, potem tylko zalerznie od rozszerzenia zmieniasz ImageIndex.

A tak w sumie to ta twoja procedurka moze do tego posluzyc.

Nie sprawdzalem:

//Zakladajac, ze w SubItems[0] masz sciezke do pliku

procedure MakeIcons(var ListView: TListView; ImageList: TImageList); 
var 
  q: Integer; 
  Icon: TIcon; 
  ListItem: TListItem; 
  FileInfo: SHFILEINFO; 
begin 
  Icon := TIcon.Create; 
  ListView.Items.BeginUpdate; 
  for q := 0 to ListView.Items.Count -1 do begin
    SHGetFileInfo(PChar(ListView.Items[q].SubItems[0]), 0, FileInfo, 
    SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON); 
    icon.Handle := FileInfo.hIcon; 
    ListItem.ImageIndex := ImageList.AddIcon(Icon); 
    DestroyIcon(FileInfo.hIcon);
  end;
  Icon.Free;
  ListView.Items.EndUpdate; 
end;
0

Dzięki, tylko że próbuje skompilować to wywala błąd

[Error] Unit1.pas(32): Undeclared identifier: 'SHFILEINFO'

itd. tylko, że zamiast SHFILEINFO wywala SHGetFileInfo itd.

0

Upewnij sie, ze w uses jest ShellAPI

//Jak znajde chwile to poprobuje

0

Ale ze mnie gapa :-) . Tylko i tak nie działa. Dobrze się kompiluje ale z ikonkami g**no.

//dzięki za chęci :-)

0

Ach ale wpadka:

procedure MakeIcons(var ListView: TListView; ImageList: TImageList); 
var 
   q: Integer; 
   Icon: TIcon; 
   FileInfo: SHFILEINFO; 
begin 
   Icon := TIcon.Create; 
   ListView.Items.BeginUpdate; 
   for q := 0 to ListView.Items.Count -1 do begin
      SHGetFileInfo(PChar(ListView.Items[q].SubItems[0]), 0, FileInfo, 
      SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON); 
      icon.Handle := FileInfo.hIcon; 
      ListView.Items[q].ImageIndex := ImageList.AddIcon(Icon); 
      DestroyIcon(FileInfo.hIcon);
   end;
   Icon.Free;
   ListView.Items.EndUpdate; 
end; 

W sumie nie wiem po co byl ten ListItem :P. Tera powinno dzialac

0

Kurde nie idzie :-( :-( :-( :-(

0

Musi isc, postaw sobie ListView, dodaj jakiegos Itema i do niego dodaj SubItema np. C:\windows\explorer.exe. Postaw ImageList i "zlinkuj" go z ListView (czyli LargeImages). Potem do jakies buttona w onclick:

MakeIcons(ListView1, ImageList1);

Wszystkie nazwy komponentow zostaw domyslne.

0

Działa, ale tylko na nowym projekcie. A jak wezmę to na moją aplikację to wywala błąd:

[Error] commander.pas(1019): Identifier redeclared: 'MakeIcons'

Co jest źle??
// zmieniłem nazwy komponentu ListView i się wszystko rozjeżdża :-( :-(

0

Angielski ... dwa razy zadeklarowales procedurke MakeIcons. Jesli ta druga byla juz wczesniej to zmien nazwe tej na jakas inna. Lub po prostu dwa razy napisales.

//U mnie wszystko jest ok, wiec nie wiem o co chodzi ...

0

Znalazłem kod źródłowy pewnego projektu, w którym jest idealnie to o co mi chodzi... Czy ktoś może mi powiedzieć, która z tych procedur w kodzie jest odpowiedzialna za wyświetlanie ikonek do rozszerzeń??

Adres do projektu:
http://xpcmd.webpark.pl/virtual_listview.rar

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