Exe-Icon für BlitzMax durch Icon.o erstellen

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Neue Antwort erstellen

Midimaster

Betreff: Exe-Icon für BlitzMax durch Icon.o erstellen

BeitragFr, Mai 28, 2010 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Exe-Icon für BlitzMax durch Icon.o erstellen


Es sind ja schon einige Wege beschrieben, wie man ein TrayIcon oder Exe-Icon in das eigene Spiel bekommt. Meist wird geraten, die EXE-Datei zunächst zu erstellen und nachträglich mit einem Resourceneditor das Icon hinzuzufügen. Besonders lästig an dieser Methode ist, dass jedesmals beim Compilieren solche Icons wieder weg sind.

Deshalb möchte ich hier einen superbequemen Weg beschreiben, der gleich eine *.o Datei erzeugt und daher keine Nacharbeit in der EXE-Datei mehr benötigt. Einziges Manko an diesem Weg: Das Ganze funktioniert nur wenn auf dem Rechner bereits MINGW Gnu C-Compiler ordnungsgemäß installiert ist.

Wer die ICO Datei schon hat kann gleich bei 3. weiterlesen.


1. geeignete PNG-Datei erstellen:

Zunächst speichert man das gewünschte Bild als PNG-Datei ab. Schon beim Malen des Bildes ist darauf zu achten, dass der Hintergrund wirklich transparent ist.



2. umwandeln in eine ICO-Datei

Mit dem kostenlosen Programm IcoFX wird nun aus dem PNG-Bild eine ICON.ICO-Datei. Das PNG-Bild wird dazu über "Bild importieren" geladen. Man kann nun einfach alle weiteren Menüpunkte bestätigen. So wird das Bild zu einem 48x48px Icon in der ICO-Datei. Die kann man jetzt gleich abspeichern. Verwende den Namen "icon.ico"

Bis hierhin war alles so ähnlich wie bei den anderen Tutorials, aber jetzt.....

Die Schritte 3 bis 5 sind nur einmalig nötig. Später kann man für weitere *.O-Dateien direkt bei 6. weitermachen



3. Einen neuen Ordern anlegen

In diesem Ordner werden später zwei Scripte die *.O Datei automatisch erzeugen. Der Pfad zu dem Ordner sollte kurz sein und die einzelnen Unterverzeichnisse max 8 Buchstaben haben und keine Leerzeichen enthalten. (altes 8:3 DOS-Format) Wir wählen daher "C:\MakeIcon\".



4. RC-Datei erstellen

In diesen Ordner wird nun mit einem Text-Editor eine Text-Datei mit dem Namen "icon.rc" angelegt. Die Datei enthält zwei Zeilen:
Achte auf die Leerzeichen! Die zweite Zeile ist eine Leerzeile. Code: [AUSKLAPPEN]
101 ICON C:\makeicon\icon.ico





5. BAT-Datei erstellen

In diesen Ordner wird nun mit einem Text-Editor eine zweite Text-Datei mit dem Namen "MakeIt.bat" angelegt. Die Datei enthält eine Zeile:
Achte auf die Leerzeichen!Code: [AUSKLAPPEN]
windres -i C:\makeicon\icon.rc -o C:\makeicon\icon.o




6. Umwandeln

Nun wird die icon.ico in den MakeIcon-Ordner kopiert und danach die Datei MakeIt.bat durch Doppelklick ausgeführt. Anschließend finden wir in dem Verzeichnis die Fertige ICON.O. Anmerkung: das Ganze funktioniert nur wenn auf dem Rechner MinGW (Gnu C-Compiler) ordnungsgemäß installiert ist, was bei den meisten BlitzMax-Usern aber sowieso der Fall sein dürfte.



7. Einbinden ins eigene Programm

Die ICON.O kommt nun in das Wurzelverzeichnis des eigenen Spiels und wird mit diesen Zeilen gleich zu Beginn des Codes automatisch ins Spiel eingebunden:
BlitzMax: [AUSKLAPPEN]
SuperStrict
?Win32
Import "icon.o"
?




8. Weitere Icons
Für weitere *.O Dateien musst du ab jetzt nur noch weitere ICON.ICO in den MakeIcon Ordner ziehen und die alte durch die neue Datei ersetzen und dann das Script starten. Die alte ICON.O wird dabei ohne Nachfrage überschrieben. Also Sicherungskopieren anlegen.




Nachtrag: Manifest einbinden

Benutzt man so eine eingebundene *.O-Datei kann es zu Bildfehlern im Programm führen. Gerade wenn man auch MaxGui ins eigene Programm einbinden kommt es häufig zu diesen Fehlern. Die Ursache liegt darin, dass das sog. Manifest des Programms zerstört wurde. Es ist daher immer klüger gleich in die ICON.RC ein neues Manifest einzubinden. Bei dieser Gelegenheit lassen sich dann auch noch Herstellerinformationen in das Programm einbauen. Folgende Änderungen sind nötig:


Die Icon.rc:

Code: [AUSKLAPPEN]
1 24 "manifest.manifest"
101 ICON C:\makeicon\icon.ico
1 VERSIONINFO
FILEVERSION 4,0,1,0
PRODUCTVERSION 4,0,1,0
FILEOS 0x40004
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
 BLOCK "040904b0"
 {
  VALUE "Comments", "music theory software"
  VALUE "CompanyName", "Midimaster Music Education Software"
  VALUE "FileVersion", "2012.02.24.0"
  VALUE "FileDescription", "RhythmTrainer"
  VALUE "InternalName", "RhythmTrainer"
  VALUE "LegalCopyright", "© Peter Wolkersdorfer"
  VALUE "LegalTrademarks", "Midimaster"
  VALUE "OriginalFilename", "RhythmTrainer"
  VALUE "ProductName", "RhythmTrainer"
  VALUE "ProductVersion", "4.0.1.0"
 }
}
BLOCK "VarFileInfo"
{
  VALUE "Translation", 0x0407, 0, 0x0409, 0, 0x0405, 0
}
}


in der ICON.RC sind zwei Dinge neu hinzugekommen. Wichtig ist die Zeile mit dem Manifest:
Code: [AUSKLAPPEN]
1 24 "manifest.manifest"

Sie bindet eine weitere Datei ein und sorgt dafür, dass die Bildfehler verschwinden.

Der Rest ist optional und enthält Daten über die Version deines Programms und deine Software-Schmiede. Du ersetzt dort alle Inhalte natürlich durch eigene Werte. Die Daten kannst du später sehen, wenn Du mit Rechtsklick auf deine EXE die "Eigenschaften" öffnest.



Die Manifest.manifest

Code: [AUSKLAPPEN]
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity
            type='win32'
            name='Microsoft.Windows.Common-Controls'
            version='6.0.0.0'
            publicKeyToken='6595b64144ccf1df'
            language='*'
            processorArchitecture='*'
         />
      </dependentAssembly>
   </dependency>
</assembly>

hier muss nichts geändert werden und nichts persönliches angepasst werden.

Wenn man nun die MakeIcon.Bat startet, wird eine verbesserte ICON.O erzeugt und die in den unteren Kommentaren beschriebenen Bildfehler verschwinden. Auch erscheint jetzt links oben in deinem Programm ein weiteres Bild deines Icons. Außerdem sind nun die "Eigenschaften" deiner EXE mit sinnvollen Inhalten gefüllt.

Vielen Dank an jsp und Eisvogel, die mir die Grundlagen für diesen Nachtrag lieferten.

Nachtrag II: Symbol in der Taskleiste


Holzchopf beschreibt in diesem Post, wie man erreicht, dass zusätzlich auch auf der Taskleiste und oben links im Fensterrahmen das Symbol erscheint. Hierfür muss eine kurze C-Funktion aufgerufen werden. Anleitung: https://www.blitzforum.de/foru...210#416210
  • Zuletzt bearbeitet von Midimaster am Mo, Feb 29, 2016 11:19, insgesamt 6-mal bearbeitet

Der Eisvogel

BeitragFr, Mai 28, 2010 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Genial Midimaster!
Wie kommst du zu solchen Kenntnissen?
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Holzchopf

Meisterpacker

BeitragSa, Mai 29, 2010 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du das jetzt sarkastisch? Natürlich war diese Methode dem ein oder anderen schon (wohl aus dem englischen Forum) bekannt - aber ich find's super, dass sich Midimaster die Mühe nimmt, das ganze hier kurz und verständlich zu übersetzen =)
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Der Eisvogel

BeitragSa, Mai 29, 2010 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das ist ernst gemeint. Ich finde es verblüffend, was man so alles machen kann, aber ich würde gerne wissen, wie man zu solchen Kenntnissen gelangt. Ich bin einfach nur fasziniert.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

das wurgel

BeitragSa, Mai 29, 2010 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man auch mehrere Icons in verschiedenen Größen einbinden? Wenn ja, gibt es eine Möglichkeit alle Icons in eine o-Datei zu packen?
1 ist ungefähr 3

Holzchopf

Meisterpacker

BeitragSa, Mai 29, 2010 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja. Indem du alle Grössen in eine .ico-Datei packst. Nachträglich geht das u.A. mit dem Tool "IcoBundle"
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

das wurgel

BeitragMo, Mai 31, 2010 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, wusste garnicht das man mehrere Icons in eine Datei packen kann, danke!
1 ist ungefähr 3

JPD

BeitragDi, Aug 03, 2010 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir zerschiest es hierbei die schöne Aero-Oberfläche. Hat sonst noch jemand das Problem (Win7 64x)

Farbfinsternis

BeitragSa, Apr 09, 2011 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry dass ich den Fred hier nochmal ausbuddele ... aber gibt es irgendeinen Trick der auch bei 64Bit OS funktioniert? Hier unter Win7 64Bit tut sich rein gar nichts.
Farbfinsternis.tv

Xeres

Moderator

BeitragSa, Apr 09, 2011 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert prinzipiell bei mir. Gibt's Fehlermeldungen? Probiert, Pfade in Anführungszeichen zu setzen?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Farbfinsternis

BeitragSa, Apr 09, 2011 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Objekt wird ja erzeugt und auch in BMax importiert, nur beim Icon des Executable tut sich nichts. Habe hier Win7 Prof 64Bit
Farbfinsternis.tv

klin

BeitragSo, Apr 10, 2011 3:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hinzufügung: Man kann auch mit der RC-Datei weitere bestimmte Informationen einfügen. Wie z.B. Version, Hersteller, Dateibeschreibung usw. (alles was man bei Eigenschaften sehen kann)
Evtl. könntest du, Midimaster, es auch noch hinzufügen.

Ansonsten gute Arbeit. Allerdings errinnere ich mich sehr schwach, dass es schonmal sowas hier gab. Allerdings in einem Beispiel. Oder wars doch in dem Englischen Forum?

MFG
Klin

Midimaster

BeitragDi, März 06, 2012 10:49
Antworten mit Zitat
Benutzer-Profile anzeigen
So, dann push ich heute mal was...

Ich habe soeben das Tutorial um ein weiteres Kapitel ergänzt (siehe erster Beitrag). Jetzt wird beschrieben, dass man ein Manifest in solche *.O-Dateien einbinden sollte und wie man das bewerkstelligt. Vielleicht könnte jeman auf einem 64-bit System testen, ob damit auch die von Farbfinsternis beschriebenen Probleme gelöst werden können?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Holzchopf

Meisterpacker

BeitragSo, Feb 28, 2016 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
So, dann push ich heute auch mal was... Alter Thread, aber relevante Information Wink

Wenn man auf die oben erwähnte Art ein Symbol in die .exe einbindet, wird dieses zwar im Explorer als Symbol dargestellt, nicht aber auf der Taskleiste oder oben links im Fensterrahmen. Zumindest nicht, wenn man ein mit Graphics() erstelltes Fenster hat. Um dem entgegen zu wirken, fügte ich jeweils im Source von glgraphics.win32.c in der Fenster-Erstell-Funktion eine Zeile ein, die einfach zusätzlich noch gleich das Symbol lud und anfügte. Um endlich mal mit diesem Gehacke aufhören zu können, habe ich nun folgende Lösung:

Eine C-Funktion, welche dem aktuellen Fenster das eingebundene Symbol aufbrummt. Geht ganz einfach: Zusätzlich zum .o File importiert ihr folgendes .c File Code: [AUSKLAPPEN]
#include <brl.mod/system.mod/system.h>

void SetIcon(){
   SendMessageA(GetActiveWindow(), WM_SETICON, ICON_BIG, LoadIcon( GetModuleHandle(0),MAKEINTRESOURCE(101) ));
}


Dann macht ihr die Funktion in einem Extern-Block noch verfügbar und könnt sie schliesslich nach Graphics() aufrufen, um das Symbol zu setzen. Beispiel BlitzMax: [AUSKLAPPEN]
SuperStrict

' das übliche Framework
Framework brl.glmax2d
' Symbol-Resource einbinden
Import "icons.o"

' SetIcon-C-Funktion in BlitzMax verfügbar machen
?Win32
Import "SetIcon.c"
Extern
Function SetIcon()
End Extern
?

' Fenster erstellen und anschliessend Symbol setzen
Graphics(800,600)
SetIcon()


While Not (KeyDown(KEY_ESCAPE) Or AppTerminate())
Delay(100)
Flip
Wend


mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group