Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   MAINICON in .exe einbinden, ich mach da was total falsch (https://www.delphipraxis.net/198216-mainicon-exe-einbinden-ich-mach-da-total-falsch.html)

KodeZwerg 14. Okt 2018 12:45

Betriebssystem: Win 10

MAINICON in .exe einbinden, ich mach da was total falsch
 
hallo leute,
ich steh mal wieder total aufm schlauch,
seit ein paar tagen entwickle ich ein mini programm, was nur während der Setup-Procedure Windows-Dialoge zeigt ansonsten hat es keine Forms. (also unit Forms/VCL ist nicht enthalten)

das ziel ist ein kontext menu eintrag mit bild für Windows 10.
was ich ausprobiert habe war zu aller erst ein {$APPTYPE CONSOLE}
das passte mir so gar nicht in die tüte wegen offener console
also diese zeile auskommentiert so das eine Windows Anwendung daraus entsteht.

mein nächster schritt war, ich schnappe mir ein icon, ändere die größe auf 12x12 pixel, lege eine .rc datei mit inhalt
Delphi-Quellcode:
MAINICON ICON "KodeZwerg.ico"
an, kompilier das zu einer .res datei und binde diese mit "{$R KodeZwerg.res}" ein.

das schien anfangs auch so zu funktionieren, jetzt irgendwie so gar nicht mehr.

nun entschied ich mich delphi die arbeit zu überlassen indem ich das Icon als Resource mit Namen "MAINICON" einbinde.
delphi hat darauf hin eine weitere .rc Datei angelegt und mit endung ".dres" eingebunden.

zu meiner verwunderung enstand immer eine datei mit dem Delphi Icon (D2010)
erstelle ich nun einen Kontext eintrag und übergebe als "Icon" den .exe Namen passieren aber ganz andere dinge.
mal ist das bild "blanko", mal isses das Delphi ding und mal mein eigenes Icon ohne das ich groß was mache.
am merkwürdigsten ist es, wenn man sich die .exe per resource editor anschaut, je nach build, mal ist delphis icon drinnen mal mein eigenes.

Von daher frage ich mal fröhlich in die Runde, wie bindet man ein icon korrekt ein wenn man keine Forms benutzt aber als ziel eine windows application erstellt?

dummzeuch 14. Okt 2018 13:05

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Zitat:

Zitat von KodeZwerg (Beitrag 1415724)
Von daher frage ich mal fröhlich in die Runde, wie bindet man ein icon korrekt ein wenn man keine Forms benutzt aber als ziel eine windows application erstellt?

Bei mir gibt es immer eine <projekt>_icon.rc-Datei mit folgendem Inhalt:

MAINICON ICON LOADONCALL MOVEABLE DISCARDABLE IMPURE "../buildtools/dz.ico"

(alles in einer Zeile)

Dabei ist der Pfad relativ zu <project>.dpr

Die compiliere ich im Prebuild-Script mit dem Microsoft Resource Compiler zu <projekt>_icon.res
(Früher habe ich dazu den Borland Ressource Compiler verwendet, aber irgendwann hatte ich damit Probleme. Weiß aber nicht mehr welche.)

Diese Datei wiederum binde ich im Projekt mittels

{$ *_icon.res}

ein.

Das klappt eigentlich immer.

twm

Bernhard Geyer 14. Okt 2018 13:18

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Kann es sein das der (seit NT fehlerhafte) Windows-Icon-Cache dir einen Strich durch die Rechnung macht.
Du kannst fröhlich das Icon in der Exe tauschen - Windows zeigt immer das alte Icon an.

Mit folgenden Script löscht den fehlerhaften Windows-Icon-Cache

Code:
@echo off
taskkill /f /IM explorer.exe
CD /d %userprofile%\AppData\Local
DEL ShellIconCache /a
Start explorer.exe

KodeZwerg 14. Okt 2018 14:07

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Zitat:

Zitat von dummzeuch (Beitrag 1415725)
MAINICON ICON LOADONCALL MOVEABLE DISCARDABLE IMPURE "../buildtools/dz.ico"

Danke twm, ich habe deinen Vorschlag fast so wie du sagtest umgesetzt und es macht was es sollte, icon ist in exe als haupticon plus kontext icon sichtbar.

Ich lasse den Delphi kompiler das beim compilieren erstellen indem ich {$R 'KodeZwerg.res' 'KodeZwerg.rc'} mache.

@bgeyer
danke für diesen durchaus sehr guten tipp nur existiert kein ShellIconCache bei mir an dieser stelle. ich such mal meine platte danach ab, rein für die zukunft :)

dummzeuch 14. Okt 2018 16:09

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Zitat:

Zitat von KodeZwerg (Beitrag 1415728)
Zitat:

Zitat von dummzeuch (Beitrag 1415725)
MAINICON ICON LOADONCALL MOVEABLE DISCARDABLE IMPURE "../buildtools/dz.ico"

Ich lasse den Delphi kompiler das beim compilieren erstellen indem ich {$R 'KodeZwerg.res' 'KodeZwerg.rc'} mache.

Das hatte ich auch mal so, allerdings gab es irgendwann mal Probleme damit. Blöderweise kann ich mich nicht mehr erinnern, was genau nicht funktionierte und welche Delphi-Version das war. Ich habe es danach umgestellt wie beschrieben und das funktionierte seitdem immer. Und da ich sowieso immer auch ein Prebuild-Script verwende um die Buildnummer hochzuzählen, ist der Aufwand eher gering.

Uwe Raabe 14. Okt 2018 16:35

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Zitat:

Zitat von dummzeuch (Beitrag 1415734)
Zitat:

Zitat von KodeZwerg (Beitrag 1415728)
Ich lasse den Delphi kompiler das beim compilieren erstellen indem ich {$R 'KodeZwerg.res' 'KodeZwerg.rc'} mache.

Das hatte ich auch mal so, allerdings gab es irgendwann mal Probleme damit.

Leider funktioniert das nur, wenn die Zeile in der DPR steht. Innerhalb einer Unit wird der RC-Anteil ignoriert.

KodeZwerg 14. Okt 2018 16:53

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
das beantwortet ungefragt genau das was mir auch in anderen projekten aufgefallen war, wenn in .pas (unit) eine .rc auf diese weise eingebunden wird sagt der das keine .res da ist, so ist dieses rätsel auch geklärt. (ich ging dann immer auf commandprompt und brcc32)
durch zufall besteht dieses projekt nur aus einer .dpr datei, von daher klappte es aber ich folge da mal twm, das finde ich sehr gut mit dem prebuild, guter vorschlag, nehme ich dankend an!

ps @twm:
ich kannte deine seite noch nicht, bin da jetzt gerade mit dem prebuild, es liest sich super und wird von dir echt gut beschrieben, vielen dank!

Bernhard Geyer 14. Okt 2018 16:55

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Ohne eine dproj-Datei werden rc-Dateien nicht nach res gewandelt.
Das erfolgt durch einen Aufruf des brcc in der dproj-Datei.

KodeZwerg 17. Okt 2018 08:54

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Zitat:

Zitat von dummzeuch (Beitrag 1415725)
MAINICON ICON LOADONCALL MOVEABLE DISCARDABLE IMPURE "../buildtools/dz.ico"

Soeben auch erfolgreich mit 64bit kompilate getestet. Danke nochmals.

Wenn ich fragen dürfte um es besser zu verstehen, worin liegt der unterschied?
Also
Delphi-Quellcode:
MAINICON ICON LOADONCALL MOVEABLE DISCARDABLE IMPURE "../buildtools/dz.ico"
vs
Delphi-Quellcode:
MAINICON ICON "../buildtools/dz.ico"
.
Gibts da ein paar informationen zu den optionen?

Ghostwalker 17. Okt 2018 09:09

AW: MAINICON in .exe einbinden, ich mach da was total falsch
 
Hab mal den Artikel bzgl der Attribute gefunden

https://docs.microsoft.com/en-us/win...rce-attributes

Vielleicht hilfts dir weiter :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf