AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WinAPI: Icon nach CreateWindowEx noch ändern
Thema durchsuchen
Ansicht
Themen-Optionen

WinAPI: Icon nach CreateWindowEx noch ändern

Ein Thema von implementation · begonnen am 6. Jul 2009 · letzter Beitrag vom 11. Okt 2009
Antwort Antwort
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#1

WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 6. Jul 2009, 17:32
Mein Programm erstellt mit CreateWindowEx ein Fenster.
Ich möchte diesem Fenster nachträglich ein anderes Icon zuweisen.
Wie mache ich das?
Marvin
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 6. Jul 2009, 17:39
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
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#3

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 6. Jul 2009, 18:00
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!!!!!!!!!!!!
Marvin
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 6. Jul 2009, 18:14
Ja, kann man.

// Edit: hat sich ja erledigt...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#5

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 11. Okt 2009, 02:45
Ich ändere in meinem Programm auch mehrfach das Icon in der Taskleiste (abhängig von einer Variable).

Delphi-Quellcode:
var HMainIcon: HICON;
begin
  //...
  hMainIcon:= LoadImage (hInstance , name , IMAGE_ICON,16,16,LR_LOADFROMFILE);
  //..
end
Ü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).

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. Am Schluss sah es so ähnlich aus wie Luckies Eintrag in der Codelib
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 11. Okt 2009, 05:46
Kann ich die Icons irgendwie in die .exe mitreinpacken bzw. in eine Ressourcendatei reinpacken? Ja, natürlich kann man Icons in die Exe packen, über eine Resourcedatei.

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).
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#7

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 11. Okt 2009, 13:15
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:
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;
Wie packe ich die jetzt eleganter (bzw. in die exe) rein?
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 11. Okt 2009, 13:19
Da du mit der VCL arbeitest nutze doch Hier im Forum suchenCoolTrayIcon.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#9

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 11. Okt 2009, 13:29
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?

  hMainIcon:= LoadImage (hInstance , name , IMAGE_ICON,16,16,LR_LOADFROMFILE);
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Benutzerbild von isilive
isilive

Registriert seit: 15. Okt 2008
Ort: Österreich
192 Beiträge
 
Delphi 2009 Professional
 
#10

Re: WinAPI: Icon nach CreateWindowEx noch ändern

  Alt 11. Okt 2009, 20:29
Ich habs gelöst!
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;
Stefan
Jedoch kann die referenzbasierte Implementierung des Standard-Objektmodells in Kombination mit den komplexen syntaktischen Dereferenzierungsregeln bei einer objektorientierten API wie ein Stolperstein wirken.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz