[Delphi] Zmienic ikone w Tray'u

0

Hey

Po uruchomieniu mam sobie ikone w Tray'u (wykozystuje tutaj komponent CoolTrayIcon), jak zrobic cos takiego aby po jakims warunku ikona zmienila sie na inna ?

np If i:=0 then zmien ikone

0

cooltrayicon1.icon.loadformfile('ikona.ico'); i chyba juz

0

cooltrayicon1.icon.loadformfile('ikona.ico');

tez mi sie to przydalo ;]

0

Niewiem moze cos zle zrobilem ale do przycisku dodalem ten ponizszy kod i cos nie dziala, nie pokazuje sie ikona w Tray'u.

cooltrayicon1.icon.loadfromfile('d:\2.ico')

Dlaczego ?

Moze jest jakis inny sposob zaladowania ikony do Tray'a ? [???]

0

a czy IconVisible jest true? może wpisałeś złą ścieżkę dostępu?

0

No to ja juz nic niewiem ! [???]

Icon Visible jest na true, sciezka jest dobra a i tak nie dziala

Nie mam pojecia co jest nie tak

0

Może trzeba odświerzyć ?

0

Odswierzyc hmmmm tylko w jaki sposob ???

Ja mam Win2000 moze to pod 2000 nie dziala ? [???]

0

Może musi być tak?
d\:2.ico
[???]

albo ikonka jest jakaś nieprawidłowa?
dla pewności można ją przekonwerterować jeszcze raz na .ico
[np. programem Irfan View.]

P.S.Też mam Windows 2000 i podobne sztuczki u mnie chodzą...
(ale używam RxTrayIcon-przy okazji polecam.Ten komponent czasem może okazać się lepszy w takiej sytuacji...)

0

nielepiej do zasobów dać np ICO1 ICO2 ICO3 ICO4 ... ICO10 i w pętli pobierać handle funckcją loadicon? for i:=1 to 10 do cooltrayicon1.icon:=loadicon(hinstance,pchar('ICO'+inttostr(i))); niewiem czy loadicon ma pchar na końcu..

0

If i:=0 then zmien ikone</quote>

po pierwsze taka pętla nie będzie działać...bo powinno być if i=0 then dalej;, a po drugie widze że popełniasz dużo błędów, skoro używasz CoolTrayIcon to tam jest opcja że możesz dodać ikony z ImageList, więc co Cię powstrzymuje, ładujesz ikony do ImageList i później jak będziesz chciał wykorzystać któraś z nich to: Cooltrayicon1.IconIndex:=1; i teraz będzie działać!!!

0

nielepiej do zasobów dać np ICO1 ICO2 ICO3 ICO4 ... ICO10 i w pętli pobierać handle funckcją loadicon? for i:=1 to 10 do cooltrayicon1.icon:=loadicon(hinstance,pchar('ICO'+inttostr(i))); niewiem czy loadicon ma pchar na końcu..

a nie mozna prosciej?
Do ImageList dodajesz ikony a nastepnie:
ImageList1.GetIcon(0{tu numer ikony}, CoolTrayIcon1.Icon);

Ja tak robie i to działa...

0

TheChoseN nie jest to prosciej poniewaz dodatkowo nieporzebnie obciąza aplikacje (oczywiesice w minimalnym stopniu ale zawsze trzeba robić jak najlepiej :) )

co do tematu wystarczy ZAPEWNE kod:

iconVisible := false; // czy tak tam jest, jak jest enabled, czy show
cooltrayicon1.icon.loadfromfile('d:\2.ico')
iconvisible := true

i bankowo bydzie dzialac :)

0

Jakoś nigdy nie musiałem używać CollTrayIcon, bo do tego celu wystarczał mi stary komponent TrayIcon,
który działał jeszcze pod Delphi 3, a może nawet wcześniej. Ale jak podejrzewam - we wszystkich takich
komponentach Ikonka będzie typu TIcon, więc można ją załadować na przykład w taki sposób. Plik *.tc:

zzz_ikona1 ICON "czerwona.ico"

Fragment programu napisanego jeszcze pod Delphi 3, który pinguje podany adres IP lub hosta i w razie
gdy ten nie odpowiada wyświetla ikonkę czerwoną, jeżeli działa - zieloną, a gdy IP jest nieprawidłowe - żółta.

procedure TMainForm.WczytajCzerwonaIkone;
var
  Ikonka: TIcon;
  ResName: PChar;
begin
  KtoraIkonka := 1;
  ResName := 'zzz_ikona1';
  Ikonka := TIcon.Create;
  Ikonka.Handle := LoadIcon(HINSTANCE, ResName);
  TrayIcon.ToolTip := 'Adres do pingowania nie odpowiada!';
  TrayIcon.Icon := Ikonka;
  Ikonka.Free;
end;

Nazwa zasoby dlatego jest w takim stylu, bo zauważyłem, że jeżeli do zasobów w Delphi dodamy ikonę o nazwie
zasobuy na przykład Ikonka1, to jest ona alfabetycznie przed standardową ikoną o nazwie zasoby MainIcon, no i
wtedy taka ikonka wyświetla się w widoku Ekspolratora czy jakiegoś managera plików jako ta domyślna właśnie ;/

// heeej! ten temat jest sprzed 6 lat! - Ktos

0

A nie lepiej tak?:

CoolTrayIcon1.IconList := ImageList1;

Gdzie w ImageList1 jest Twoa ikonka

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