![]() |
TrayIcon zur Laufzeit ändern (Canvas?, BMP -> ICO?)
Hallo!
Momentan bin ich dabei, eine Binäruhr als Desktopapplikation zu programmieren. Für Optionen etc. wird es nicht in der Taskleiste sondern im Tray angezeigt. Da es bei einer Uhr jetzt aber praktisch wäre, wenn man die Zeit auch bei geöffneten Fenstern lesen kann (gut, bei einer Binäruhr jetzt nicht unbedingt; vor Allem, wenn fast direkt daneben die Windows-Uhr ist... aber es würde auch besser aussehen), möchte ich sie im Trayicon dynamisch anzeigen. Ich habe schon versucht, sie in ein TImage zu zeichnen, zu speichern und als Icon wieder zu laden - geht natürlich nicht, weil als Bitmap gespeichert wird und als *.ico geladen :? Gibt es eine Möglichkeit, Bitmaps zu Icons zu konvertieren (habe nur welche in die andere Richtung gefunden) oder kann ich auch anders auf das Canvas des TrayIcons zeichnen? |
Re: TrayIcon zur Laufzeit ändern (Canvas?, BMP -> ICO?)
Such mal nach
![]() |
Re: TrayIcon zur Laufzeit ändern (Canvas?, BMP -> ICO?)
Ach, danke!
Peinlich, dass ich nicht noch zuerst hier gesucht habe... :oops: Das Icon wird erfolgreich erstellt (Testweise habe ich auch mal speichern lassen), aber leider erscheint es immernoch nicht im Tray.
Delphi-Quellcode:
function CreateIconFromBmp(Bmp: TBitmap): TIcon; //aus der DP ;)
begin with TImageList.CreateSize(Bmp.Width, Bmp.Height) do try {$IFDEF VER90} with Bmp do AddMasked(Bmp, Canvas.Pixels[Width-1, Height-1]); {$ELSE} AddMasked(Bmp, Bmp.TransparentColor); {$ENDIF} Result := TIcon.Create; GetIcon(0, Result); finally Free; end; end; procedure TForm1.IconTmrTimer(Sender: TObject); var I,J: Integer; begin Image1.Picture.Bitmap.Canvas.Brush.Color := clblue; Image1.Picture.Bitmap.Canvas.FillRect(rect(0,0,16,16)); for I := 0 to 5 do begin for J := 0 to 3 do begin if ClockForm.BinLights[I].Lights[J] = True then begin Image1.Picture.Bitmap.Canvas.Pixels[I*2+1,J*2+1] := clLime; end; end; end; TmpIcon.Free; TmpIcon := CreateIconFromBmp(Image1.Picture.Bitmap); TmpIcon.SaveToFile('tmpIcon.ico'); //Öffnen mit anderen Programmen klappt ohne Probleme Fillchar(NotifyIconData,Sizeof(NotifyIconData),0); //dieser Abschnitt wird auch schon im OnCreate aufgerufen. Danach bleibt das Icon im Tray transparent NotifyIconData.cbSize := Sizeof(NotifyIconData); NotifyIconData.Wnd := Handle; NotifyIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; NotifyIconData.uCallbackMessage := WM_TASKABAREVENT; //NotifyIconData.hIcon := Application.Icon.Handle; NotifyIconData.hIcon := TmpIcon.Handle; NotifyIconData.szTip := 'BinaryClock'; Shell_NotifyIcon(NIM_ADD, @NotifyIconData); end; |
Re: TrayIcon zur Laufzeit ändern (Canvas?, BMP -> ICO?)
Muss es nicht auch
Delphi-Quellcode:
heißen?
Shell_NotifyIcon(NIM_MODIFY, @NotifyIconData);
|
Re: TrayIcon zur Laufzeit ändern (Canvas?, BMP -> ICO?)
Danke, klappt perfekt!
Ich glaube, heute ist nicht mein Tag :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 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-2025 by Thomas Breitkreuz