![]() |
Application.Icon setzen
Hallo,
in meiner App erscheint zuerst ein SpashScreen. Das ist eine einfache TForm. Das Hauptformular wird erst später geladen. Ich möchte nun dass in der Taskleiste nun gleich ein Icon und der Titel erscheint. Beim Titel klappt das mit Application.Titel recht gut, beim Icon gelingt es mir nicht. Wie macht man das am Besten, woran kann es liegen? Letzter Versuch war:
Delphi-Quellcode:
cxImageListMainIcon ist dabei einem Imagelist. Mit einem TImage gings auch nicht. Auch nicht mit SplashForm.Icon.Icon := TIcon.Create; try SplashForm.cxImageListMainIcon.GetIcon(0, Icon); Application.Icon.Assign(Icon); finally Icon.Free; end; Für Ideen oder eine Lösung wäre ich dankbar. |
AW: Application.Icon setzen
Delphi-Quellcode:
Application.Icon := SplashForm.cxImageListMainIcon.GetIcon(0, Icon);
sollte eigentlich funktionieren. |
AW: Application.Icon setzen
Danke. Leider Nein: [DCC Fehler] Fm_Splash.pas(70): E2010 Inkompatible Typen: 'TIcon' und 'procedure, untyped pointer or untyped parameter': GetIcon ist keine function.
(PS.: gegooglet habe ich auch schon lange.) |
AW: Application.Icon setzen
Mein Fehler. So natürlich:
Delphi-Quellcode:
IconX := SplashForm.cxImageListMainIcon.GetIcon(0, Icon);
Application.Icon := IconX; |
AW: Application.Icon setzen
Sorry, dadurch wird GetIcon immer noch nicht zu einer function ;-)
|
AW: Application.Icon setzen
So hole ich mir zur Laufzeit Icons aus der Resource:
Delphi-Quellcode:
{$R MYICONS.RES}
procedure TForm1.Button1Click(Sender: TObject); var h : hIcon; begin h := LoadIcon(hInstance, 'ICON_1'); Application.Icon.Handle := h; InvalidateRect(Application.Handle, nil, true); end; |
AW: Application.Icon setzen
Na dann jetzt aber nochmal richtig ...
Delphi-Quellcode:
oder direkt ohne Zwischenvariable
SplashForm.cxImageListMainIcon.GetIcon(0, Icon);
Application.Icon := Icon;
Delphi-Quellcode:
SplashForm.cxImageListMainIcon.GetIcon(0, Application.Icon);
|
AW: Application.Icon setzen
Funktioniert leider auch nicht - außer dass es später eine Schutzverletzung gibt (vermutlich weil es dann SplashForm und soit auch das Icon nicht mehr gibt.)
@KodeZwerg: Danke. Das sieht jetzt eher lowlevel aus. Versucht habe ich es so:
Delphi-Quellcode:
Es funktionert aber auch nicht. Nach dem Debugger hat h einen Wert. Nach der Doku ("If the function succeeds, the return value is a handle to the newly loaded icon. If the function fails, the return value is NULL. To get extended error information, call GetLastError.") müsste das Laden ja dann geklappt haben weil h ist ja nicht NULL.
h := LoadIcon(hInstance, 'MAINICON');
Application.Icon.Handle := h; InvalidateRect(Application.Handle, nil, true); Application, Application.Icon.Handle und Application.Handle habe nach Debugger auch was drin. Das Icon erscheint aber nicht bei mir. Ich habe den Verdacht dass mir DevExpress da noch irgendwie reinspuckt. Aufgrund von ![]()
Delphi-Quellcode:
Ich gebs mal vorläufig auf.
var
hApp: HWND; hSmall : hIcon; hLarge : hIcon; begin hApp := Application.Handle; hSmall := LoadImage(HInstance, 'MAINICON', IMAGE_ICON,16, 16, 0); hLarge := LoadImage(HInstance, 'MAINICON', IMAGE_ICON,256, 256, 0); SendMessage(hApp, WM_SETICON, ICON_SMALL, hSmall) ; SendMessage(hApp, WM_SETICON, ICON_BIG, hLarge) ; InvalidateRect(hApp, nil, true); UpdateWindow(hApp); end; |
AW: Application.Icon setzen
Delphi-Quellcode:
Also in MyIcons.res existiert ein Icon was den Namen "ICON_1" bekommen hat, dem System ist in der Regel die Größe egal da es von selbst runter/hoch skaliert. Ich hab keinen Check drinn da die Resource bei mir immer existiert. Ob es LowLevel ist kann ich nicht sagen, nur das es bei mir auf diese Weise klappt kann ich sagen.
{$R MYICONS.RES}
procedure TForm1.Button1Click(Sender: TObject); var h : hIcon; // wir brauchen das Handle, nicht das Image, deswegen HICON begin h := LoadIcon(hInstance, 'ICON_1'); // in Resource-Datei MyIcons.res ist ein Eintrag Namens ICON_1, Handle dahin erzeugen Application.Icon.Handle := h; // Handle an das Programm übergeben InvalidateRect(Application.Handle, nil, true); // Programm update end;
Code:
sollte das WinApi Äquivalent sein und genügen.
SendMessage(hApp, WM_SETICON, ICON_BIG, h);
Ich vermute LoadImage() macht nicht das gleiche wie LoadIcon().
Code:
Probier's mal so.
SendMessage(hApp, WM_SETICON, ICON_BIG, LoadIcon(hInstance, 'MAINICON'));
|
AW: Application.Icon setzen
Zitat:
Delphi-Quellcode:
SplashForm.cxImageListMainIcon.GetIcon(0, Application.Icon);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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