![]() |
WinAPI: Icon nach CreateWindowEx noch ändern
Mein Programm erstellt mit CreateWindowEx ein Fenster.
Ich möchte diesem Fenster nachträglich ein anderes Icon zuweisen. Wie mache ich das? |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Ein Beispiel:
Delphi-Quellcode:
var hAppIcon: HICON; begin // ... hAppIcon:= LoadImage(hInstance, MAKEINTRESOURCE(1), IMAGE_ICON, 0, 0, 0); if SendMessage(hAppHnd, WM_SETICON, ICON_SMALL, INTEGER(hAppIcon) ) = 0 then SendMessage(hAppHnd, WM_SETICON, ICON_BIG, INTEGER(hAppIcon) ); DestroyIcon(Icon); // ... end |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
kann ich mit LoadImage auch Icons aus Dateien lesen, und wenn ja, wie?
[EDIT] schon gefunden: LoadImage(hInstance,Dateiname,IMAGE_ICON,0,0,LR_LO ADFROMFILE); es funzt auch danke!!!!!!!!!!!! |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Ja, kann man.
// Edit: hat sich ja erledigt... |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Ich ändere in meinem Programm auch mehrfach das Icon in der Taskleiste (abhängig von einer Variable).
Delphi-Quellcode:
Übrigens kann man mit dem 4. und 5. Parameter bestimmen welches Icon geladen wird, da eine .ico Datei oft mehrere Grössen beinhaltet (48x48, 32x32, 16x16).
var HMainIcon: HICON;
begin //... hMainIcon:= LoadImage (hInstance , name , IMAGE_ICON,16,16,LR_LOADFROMFILE); //.. end Angenommen das Trayicon würde sich sehr oft ändern, dann wäre ein dauerndes 'Loadfromfile' aber Irsinn, oder?! Kann ich die Icons irgendwie in die .exe mitreinpacken bzw. in eine Ressourcendatei reinpacken? PS: Ich nutze keine Komponente, sondern hab mir die Prozeduren mühsam zusammengestöpselt. :coder: Am Schluss sah es so ähnlich aus wie ![]() |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Delphi-Quellcode:
Ja, natürlich kann man Icons in die Exe packen, über eine Resourcedatei.
Kann ich die Icons irgendwie in die .exe mitreinpacken bzw. in eine Ressourcendatei reinpacken?
Wie viele, oft oder schnell möchtest du denn die Icons ändern ? Es gibt da mehrere Möglichkeiten zB. mit einer Imagelist (auch für NonVCL). |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Die Icons werden in unregelmässigen Abständen geändert.
Je nach Stellung einer TTrackbar ändert sich das Icon in der TNA. Es gibt 6 Stück davon xx0-5.ico und die werden jetzt halt per Loadfromfile geladen.
Delphi-Quellcode:
Wie packe ich die jetzt eleganter (bzw. in die exe) rein?
procedure TForm1.ChangeTrayIcon(a:integer);
var name:pwidechar; begin name := PChar('sound'+inttostr(a)+'.ico'); hMainIcon:= LoadImage (hInstance , name , IMAGE_ICON,16,16,LR_LOADFROMFILE); //laden NID.hIcon := HMainIcon; // und zuweisen Shell_NotifyIcon(NIM_MODIFY, @NID); // Modify melden end; |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Da du mit der VCL arbeitest nutze doch
![]() |
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Das möchte ich jetzt nicht, weil ich jetzt eh schon alles schritt für schritt, diskret in Prozeduren reingepackt habe. Es funzt auch sehr gut. Ich möchte nur noch die Icons mit-reinpacken. Am besten über eine Imagelist oder? Aber die Frage - für die es wahrscheinlich eine sehr einfache Antwort gibt - lautet:
Wie kriege ich statt dieser Zeile das Bild aus der Imagelist auf das Iconhandle?
Delphi-Quellcode:
hMainIcon:= LoadImage (hInstance , name , IMAGE_ICON,16,16,LR_LOADFROMFILE);
|
Re: WinAPI: Icon nach CreateWindowEx noch ändern
Ich habs gelöst! :coder: :cheers:
Der Weg führt über ein temporäres TIcon. Icon aus Imagelist holen und zuweisen:
Delphi-Quellcode:
procedure TForm1.ChangeTrayIcon(a:integer);
var Icon1:ticon; begin Icon1 := TIcon.Create; //Icon erstellen imagelist1.GetIcon(a,Icon1); //Icon aus der Imagelist holen //hMainIcon := Icon1.Handle; // auch möglich //NID.hIcon := HMainIcon; // auch möglich NID.hIcon := Icon1.Handle; //Icon zuweisen Shell_NotifyIcon(NIM_MODIFY, @NID); Icon1.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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