![]() |
Tray Icon Symbol ändern.
Hallo,
kann mir jmd. sagen wie ich das Tray Icon ändere. Wenn das Programm läuft würde ich gern ein anderes Icon laden. Und ist es möglich, da ich eine art Temperaturanzeigeprogramm machen möchte, das dort auch schrift steht ? P.s. Ich benutze Delphi7 und habe keine CoolTray Komponeten. |
Re: Tray Icon Symbol ändern.
Schau mal nach Shell_NotifyIcon mit NIM_MODIFY.
|
Re: Tray Icon Symbol ändern.
Zitat:
|
Re: Tray Icon Symbol ändern.
Ok ich glaube ich hätte da eine Ahnung wie ich das ändern kann. Nur wo speicher ich die Icons erstmal ? Und wie und wo erstelle ich sie ? geht das mit dem mitgelieferten ImageEditor von Delphi ? Welches Format müssen die haben ?
|
Re: Tray Icon Symbol ändern.
Das Format muss AFAIK *.ico sein und mit dem Bildeditor kannst Du sie erstellen (obwohl der nicht der Weisheit letzter Schluss ist).
|
Re: Tray Icon Symbol ändern.
Wenn ich damit Tmeperaturen darstellen möchte... reicht es wenn dann die Zahlen von 0 .. 9 als halbes icon erstelle und sie dann irgendwie vor dem darstellen zusammenpacke ? Wie kann man das umsetzten ?
|
Re: Tray Icon Symbol ändern.
Ach du liebes bisschen, das dürfte schwierig werden. Du könntest dynamisch auf eine Speicherbitmap zeichnen und diese in ein Icon wandeln, aber trivial ist das nicht gerade.
|
Re: Tray Icon Symbol ändern.
Hmm... Aber es gibt doch schon Programm die z.B. die Temperaur vom CPU oder sonstwas ausgebem und diese dann auch im Tray anzeigen können. Ich glaueb nicht das sich da jmd. die Mühe gemacht hat und alls möglichen Temperaturen von hand gezeichnet und als icon gespeichert hat.
|
Re: Tray Icon Symbol ändern.
Deshalb ja der dynamische Ansatz. Aber AFAIR kannst Du nicht direkt auf ein Icon zeichnen, sondern musst dafür zunächst eine Bitmap nehmen und diese dem Icon zuweisen. Ich lasse mich da aber gerne aufklären, falls das auch einfacher geht.
|
Re: Tray Icon Symbol ändern.
wie kann ich denn überhaupt das icon ändern das klappt bei mir einfach nicht...
Delphi-Quellcode:
kann mir einer sagen was da rein muss...
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon; Begin ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico'); // was muss hier rein... Shell_NotifyIcon(NIM_MODIFY, @icondata); end; |
Re: Tray Icon Symbol ändern.
Hallo,
so eine kleine Temperaturanzeige habe ich auch mal geschrieben. Kleiner Auszug daraus:
Delphi-Quellcode:
...
FBmpTemp.Width:= 16; FBmpTemp.Height:= FBmpTemp.Width; ... procedure TMForm.DrawBmp(Text : AnsiString); begin Text:= Format('%s°', [Text]); FBmpTemp.Canvas.TextOut((FBmpTemp.width - FBmpTemp.Canvas.TextWidth(Text)) div 2, (FBmpTemp.Height - FBmpTemp.Canvas.TextHeight(Text)) div 2, Text); FImageList.Clear; FImageList.AddMasked(FBmpTemp, clWhite); FImageList.GetIcon(0, FIcon); end; ... FGet_CPUBoardValue(addr(Value)); DrawBmp(inttostr(Value)); IconData.hIcon := FIcon.Handle; Shell_NotifyIcon(NIM_MODIFY, @IconData); ... |
Re: Tray Icon Symbol ändern.
Hey danke für den Code ! =)
Aber ich kann noch immer das Icon nicht ändern ... Was ist denn nur falsch an dem Code :gruebel:
Delphi-Quellcode:
Ich bekomme immer eine Access violation ...
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon; Begin ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico'); icondata.hIcon := ficon.Handle; Shell_NotifyIcon(NIM_MODIFY, @icondata); end; |
Re: Tray Icon Symbol ändern.
Fehlt da nicht ein Create? ;)
|
Re: Tray Icon Symbol ändern.
Das hatte ich auch schon vermutet, aber es bringt die gleiche Fehlermeldung...
Delphi-Quellcode:
Allerdings kommt auch ein Warnung: Variable 'fIcon' might not have been initialized
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon; Begin ficon.Create; ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico'); icondata.hIcon := ficon.Handle; Shell_NotifyIcon(NIM_MODIFY, @icondata); end; Habe ich da irgendwas falsch gemacht ? |
Re: Tray Icon Symbol ändern.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var fIcon: TIcon; Begin fIcon := Ticon.Create; try ficon.LoadFromFile(extractfilepath(application.exename) + '63.ico'); icondata.hIcon := ficon.Handle; Shell_NotifyIcon(NIM_MODIFY, @icondata); finally fIcon.Free; end; end; |
Re: Tray Icon Symbol ändern.
Jetzt gehts =) danke !!
:cheers: |
Re: Tray Icon Symbol ändern.
Habe es jetzt auch geschaft das icon dynamisch zu erstellen.
Delphi-Quellcode:
Hoffe irgendwer kann das gebrauchen ;)
procedure TForm1.Timer1Timer(Sender: TObject);
var zehner,einer : integer; temp: cardinal; szahl : STring; erstellticon : TIcon; begin temp :=GetGpuTemp; // gibt den Temperaturwert zurück; if temp > 100 then temp := temp - 100; szahl := inttostr(temp); zehner := strtoint(szahl[1]); einer := strtoint(szahl[2]); imagelist1.GetBitmap(zehner,image1.Picture.Bitmap); // Hier sind 10 Bilder (drin von 0 - 9) imagelist1.GetBitmap(einer,image2.Picture.Bitmap); BufferBox.Canvas.CopyMode := cmSrcCopy; BufferBox.Canvas.CopyRect(rect(0,0,16,32), image1.Canvas, rect(0,0,16,32)); BufferBox.Canvas.CopyRect(rect(16,0,32,32), image2.Canvas, rect(0,0,16,32)); ViewingBox.Canvas.CopyMode := cmSrcCopy; ViewingBox.Canvas.CopyRect(rect(0,0,32,32), BufferBox.Canvas, rect(0,0,32,32)); erstellticon:=CreateIconFromBmp(Viewingbox.Picture.Bitmap); icondata.hIcon := erstellticon.Handle; Shell_NotifyIcon(NIM_MODIFY, @icondata); end; |
Re: Tray Icon Symbol ändern.
Du solltest erstellticon noch freigeben. Ansonsten ist das ziemlich genau das, was ich gemeint hatte :thumb:
|
Re: Tray Icon Symbol ändern.
hmm wenn ich am Ende dieser Procedure erstellticon.free setzte, dann wird beim nächstem Minimieren das icon in der Tastkab nicht mehr angezeigt...
|
Re: Tray Icon Symbol ändern.
Ich vermute mal, dass CreateIconFromBmp eine benutzerdefinierte (selbstgeschriebene) Prozedur ist. Du könntest diese doch dahingehend ändern, dass Du das Icon als Parameter übergibst. Somit sparst Du Dir das ständige Neuerstellen und Zuweisen des Handles. Das könnte dann etwa so aussehen:
Delphi-Quellcode:
Getippt und nicht getestet (frei nach marabu ;) )
//erstellticon ist meinetwegen jetzt ein privates Feld
if not Assigned(erstellticon) then begin erstellticon := TIcon.Create; icondata.hIcon := erstellticon.Handle; end; CreateIconFromBmp(Viewingbox.Picture.Bitmap, erstellticon); Shell_NotifyIcon(NIM_MODIFY, @icondata); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz