Probleme bei Icons



  • Iconer schrieb:

    HICON hIcon, hIconSm;
    ...
    hIcon = LoadImage (NULL, "valet.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
    ...
    hIcon = LoadImage (NULL, "valet.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
    ...
    

    ➡

    Iconer schrieb:

    HICON hIcon, hIconSm;
    ...
    hIcon = (HICON)LoadImage (NULL, "valet.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);
    ...
    hIcon = (HICON)LoadImage (NULL, "valet.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
    ...
    


  • Ohhh...daran hatte ich auch schon gedacht nur nhicht da^^
    Danke, funktioniert, darauf wäre ich jetzt erstmal nicht mehr gekommen^^



  • Ich hab da noch ne Frage: wie kann ich das Icon denn so laden, dass es auch als Icon vom Programm angezeigt wird? Also wie das Symbol vom Arbeitsplatz zum Beispiel.


  • Mod

    Indem nan z.B. SetIcon verwendet um dies währen der Laufzeit zu machen.
    Ansonsten wird für ein Programm das erste Icon mit der niedrigsten ID im Explorer angezeigt, wenn es sich nicht um eine registrierte Komponente handelt.



  • Ich meine, wenn das Prgoramm noch nicht gestartet worde ist...ich habe (glaube ich) in Erinnerung, dass das auch mal irgendwie ging...


  • Mod

    Sicher: Wie ich geschrieben habe, das Icon mit der niedrigsten ID bzw. das erste Icon das in der EXE gefunden wird, wird auch im Explorer verwendet.



  • Martin Richter schrieb:

    Indem nan z.B. SetIcon verwendet um dies währen der Laufzeit zu machen.
    Ansonsten wird für ein Programm das erste Icon mit der niedrigsten ID im Explorer angezeigt, wenn es sich nicht um eine registrierte Komponente handelt.

    SetIcon ist IMHO MFC...Das WinApi-Pendant ist SetClassLong.



  • Also es handelt sich nicht um ein Icon aus einer Resource-Datei...ich weiß jetzt aber nicht ob das was ändert...



  • Iconer schrieb:

    Also es handelt sich nicht um ein Icon aus einer Resource-Datei...ich weiß jetzt aber nicht ob das was ändert...

    Nö da ändert sich eigentlich nix...So sollte es funktionieren:

    // zum Beispiel unter WM_CREATE:
    SetClassLong(hWnd, GCL_HICON, reinterpret_cast<long>(LoadImage(...)));
    


  • Habe das jetzt so gemacht:

    SetClassLong(hMain, GCL_HICON, reinterpret_cast<long>(LoadImage(NULL, "valet.ico", IMAGE_ICON, 64, 64, LR_LOADFROMFILE)));
    

    Aber ich sehe immer noch kein Icon.
    Ich will das Icon bevor ich das Programm gestartet habe sehen, also statt diesem Fenster möchte ich das Icon...



  • Iconer schrieb:

    Habe das jetzt so gemacht:

    SetClassLong(hMain, GCL_HICON, reinterpret_cast<long>(LoadImage(NULL, "valet.ico", IMAGE_ICON, 64, 64, LR_LOADFROMFILE)));
    

    Aber ich sehe immer noch kein Icon.
    Ich will das Icon bevor ich das Programm gestartet habe sehen, also statt diesem Fenster möchte ich das Icon...

    Versuchs mal mit ner geringeren Größe, z.B.: 16x16 oder 32x32.



  • Auf die Idee bin ich auch schon gekommen, hat aber nichts gebracht.



  • Iconer schrieb:

    Ich will das Icon bevor ich das Programm gestartet habe sehen, also statt diesem Fenster möchte ich das Icon...

    Hi

    Wenn ich mich mal so einschalten darf: Wann willst du jetzt das Icon genau sehen? Als Symbol für deine Exe-Datei im Explorer oder als Symbol für dein Fenster (in der Taskbar und in der linken oberen Ecke deines Fensters)?

    So, wie ich das verstehe, willst du, dass das Icon im Explorer als Symbol für dein Programm angezeigt wird. Also wie jetzt?



  • Sry wenn das unverständlich war: Im Explorer



  • Dann ist das mit dem SetClassLong und so hinlänglich 🤡

    Martin Richter schrieb:

    Wie ich geschrieben habe, das Icon mit der niedrigsten ID bzw. das erste Icon das in der EXE gefunden wird, wird auch im Explorer verwendet.

    Irgendwas kann dann in deiner Resourcen-Datei nicht stimmen. Müsste so aussehen:

    ID_ICON_MAIN ICON DISCARDABLE "Data\\MeinIcon.ico"
    

    Der String sollte deinem (relativen oder totalen) Dateipfad für die Icon-Datei entsprechen. IC_ICON_MAIN durch deine Icon-ID oder eine Zahl ersetzen. Das "ICON" ist wichtig!

    Diese Syntax funktioniert so sicherlich nicht bei jedem Compiler. Also sag mal bitte, was du für einen Compiler hast und deinen Code in der Resourcen-Datei.



  • *hust*Resourcen-Datei? Geht das nicht anders? Es gibt 2 Gründe warum ich die nicht mag:
    1: Ich finde die Blöd 🙂
    2: nur Gott (und ein paar Auserwählt) wissen, wie man die beim Borland Compiler (nicht bei der IDE, sondern beim BCC) einbindet



  • Also nicht, dass ihr denkt, dass ich zu faul bin das zu suchen. Aber ich habe einiges probiert, aber das war alles irgendwo nicht funktionstüchtig.


  • Mod

    CodeFinder schrieb:

    Martin Richter schrieb:

    Indem nan z.B. SetIcon verwendet um dies währen der Laufzeit zu machen.
    Ansonsten wird für ein Programm das erste Icon mit der niedrigsten ID im Explorer angezeigt, wenn es sich nicht um eine registrierte Komponente handelt.

    SetIcon ist IMHO MFC...Das WinApi-Pendant ist SetClassLong.

    Nein! SetIcon ist nur ein MFC Wrapper für WM_SETICON. SetClassLong für das Icon ist ein ganz anderer Ansatz und beeinflusst alle Fenster einer Klasse. WM_SETICON beeinflusst nur dieses Fenster und kann dynamisch verwendet werden.


  • Mod

    Iconer schrieb:

    *hust*Resourcen-Datei? Geht das nicht anders? Es gibt 2 Gründe warum ich die nicht mag:
    1: Ich finde die Blöd 🙂
    2: nur Gott (und ein paar Auserwählt) wissen, wie man die beim Borland Compiler (nicht bei der IDE, sondern beim BCC) einbindet

    Blöd finden ist dämlich und wenn es nur Gott weiß... tja dann solltest Du es vielleicht mit Beten probieren... ich mache das jedenfalls regelmässig... zu den Auserwählten habe ich auch nie gehört, denn ich habe Borland Produkte immer gemieden wie die Pest.
    SCNR

    Zur Sache:
    Es geht nicht anders. Du musst das Icon als Ressource einbinden wiel der Explorer eben genau die entsprechende Resource aus der EXE lädt.
    Nach anderem brauchst Du gar nicht zu suchem.



  • Martin Richter schrieb:

    Nein! SetIcon ist nur ein MFC Wrapper für WM_SETICON. SetClassLong für das Icon ist ein ganz anderer Ansatz und beeinflusst alle Fenster einer Klasse. WM_SETICON beeinflusst nur dieses Fenster und kann dynamisch verwendet werden.

    Hm k, k, (wie ich schon sagte: IMHO), aber du solltest im WinAPI-Subforum vllt auch WinAPI-Snippets posten 😉 .


Anmelden zum Antworten