Ikonki w ListView :)

0

Szukałem na forum, szukałem i wszystko co znalazłem to niedziała :( a chodzi mi o to:
Mam ListView1 w stylu raport. Pobiera od z klucza rejestru wpisy i wyświetla. Chodzi mi o to, żeby przed wpisem pojawiła sie ikonka danego programu (wartość klucza to ścieżka do pliku). Ikonka najlepiej żeby pokazywała się w ImageList o indexie 0, który będzie ładował ikonkę do ListView. Mam nadzieje że wiecie o co mi chodzi :) Wiem, że tu coś śmierdzi pobieraniem ikonki z pliku, ale niemam pojęcia jak to zrobić - proszę o pomoc :(

PS.: Zamieszczam sceena jak to miało by wyglądać :)
user image

0

Chyba komponenty LMD maja takie cuś :-) A tak pza tym to -> OwnerDraw :-[ ... baj [cya]

0

Przecież wystarczy zwykły listview. AddIcon listitema chyba.

// Dopisane
To poczytaj w helpie o TListItem.AddIcon, TIcon oraz w Win SDK na temat ExtractIcon().

0

A może jakas procedurka, bo ja jestem laik jeszcze i sie dopiero ucze od takich ludzi jak wy :D Mam kilka książek, ale niegdzie niepisze o takich rzeczach :/

0

Przykład:

var
  Icon : TIcon;
  Reg : TRegistry;
  Values : TStrings;
  i: Integer;
begin
  Icon := TIcon.Create;
  Reg  := TRegistry.Create;
  Values := TStringList.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKey('Software\JakisKlucz', True);
    Reg.GetValueNames(Values); // bierzemy wpisy z rejestru
    for i := 0 to Values.Count - 1 do
    begin
    // kolejno dodajemy wpisy do ListView
      ListView1.Items.Add.Caption := Values.Strings[i];
      ListView1.Items.Item[i].SubItems.Add(Reg.ReadString(Values.Strings[i]));
      Icon.Handle := ExtractIcon(hInstance,PChar(Values.Strings[i]),0); // pobieramy ikone programu
     if Icon.Handle = 0 then // jezeli nie ma ikony
       ListView1.Items.Item[i].ImageIndex := -1
     else
       begin //jezeli jest
         ImageList1.AddIcon(Icon); // dodajemy ją do ImageList
         ListView1.Items.Item[i].ImageIndex := ImageList1.Count -1 // numer ikony w ImageList dla danego wpisu
       end;
    end;
  finally
    Icon.Free;
    Reg.Free;
    Values.Free;
  end;
end;

Do uses musisz dopisać ShellApi i Registry

[<font color="red">Dopisane do postu poniżej</span>]

Nie napisałeś wcześniej z jakiego klucza masz zamiar pobierać listę tych programów. Skąd miałem wiedzieć, że chodzi Tobie o "autostart" ?

Tak trudno trochę pomyśleć i wprowadzić zmiany ?

Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\JakisKlucz', True);

na:

Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);

Tylko, że w tych wpisach mogą być również parametry z jakimi mają być uruchamiane programy. Wtedy możesz zapomnieć o odczytaniu ikonki tą procedurą, którą podałem. Musisz sam sobie poradzić z wycięciem tych parametrów :P

0

(...) Reg.OpenKey('Software\JakisKlucz', True); (...)

Hmmm, ale każdy użytkownik ma inne wpisy na ListView więc niemoge sobie pobrać ikonki z rozszeżenia - chciałem, żeby ikonka była dodawana, ale danego programu np.: jak ma się uruchamiać Notatnik wraz ze startem systemu (HKEY_CURRENT_USER) to chciałbym żeby obok tego wpisu była także ikonka notatnika pobrana z Wartości danego klucza :D

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