Probleme bei Icons



  • 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 😉 .



  • Aber du hast das Icon schon als Resource eingebunden, oder? Wenn nicht, kann Windows das Icon nicht als Symbol für dein Programm anzeigen! Das Icon muss sich dafür nämlich in der Exe befinden! Windows muss ja das Icon anzeigen können, ohne das Programm zu starten. MS hat deshalb halt festgelegt, dass das Icon als ICON-Resource in der Exe-Datei eingebunden sein muss!

    Greets, Badestrand


  • Mod

    [quote="CodeFinderHm k, k, (wie ich schon sagte: IMHO), aber du solltest im WinAPI-Subforum vllt auch WinAPI-Snippets posten 😉 .[/quote]

    Uppps... Sorry! Ich habe beim hin herspringen zwischen den Foren das gar nicht gemerkt. Werde mich bessern... 🕶



  • mein problem ist ja eben nur, da ich nicht weiß wie ich eine rc-Datei in den Borlanc C Compiler einbinden soll...wie gesagt habe noch nichts gefunden was wirklich funktioniert



  • @Iconer

    Die .rc-Datei kannst Du nicht einbinden. Wenn Du eine IDE hast, kannst Du die .rc-Datei "zum Proojekt hinzufügen", wie das geht, hängt von der IDE ab. Bei einem Kommandozeilencompiler mußt Du die .rc-Datei mit dem Resourcen-Compiler kompilieren (ERgebnis ist eine .res-Datei). Danach wird die .res-Datei mit der .obj-Datei (aus dem Quelltext kompiliert) verlinkt.

    Normalerweise gibt es für alle Borland-Kompiler auch eine IDE. Für Bcc 5.5 frei Haus im Internet. Mal googeln. 🙂


Anmelden zum Antworten