Programmicon

Anfängerfragen zum Programmieren mit PureBasic.
basicer
Beiträge: 14
Registriert: 19.12.2011 06:34

Programmicon

Beitrag von basicer »

Hallo!
Wie kann ich meinem Programm ein Icon verpassen? Ich meine das Icon links oben in der Fensterecke und dass im Explorer angezeigt wird, wenn die EXE angezeigt wird.

Habe im DataSection Bereich den Eintrag ICON: IncludeBinary "d:\meinpfad\favicon.ico" probiert, hat aber keine Wirkung und bringt auch keinen Fehler beim Compilieren.
Ist das falsch oder hat das Icon vielleicht nicht das richtige Format? Es handelt sich um ein "echtes" favicon was man in der Webprogrammierung nutzt.

Danke euch
Ramihyn_
Beiträge: 61
Registriert: 20.06.2007 10:56

Re: Programmicon

Beitrag von Ramihyn_ »

Unter dem Menü "Compiler->Compiler Options" einfach "Use Icon" anklicken und ein .ICO Bildchen auswählen (32x32 "üblicherweise").

Frohes Fest!
basicer
Beiträge: 14
Registriert: 19.12.2011 06:34

Re: Programmicon

Beitrag von basicer »

Klasse!

Vielen Dank und allen frohes Fest.
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: Programmicon

Beitrag von Waldixxl »

Hallo

und wie mache ich das unter Linux, bei mir wird das Icon leider nicht angezeigt.
(wen ich den gleichen Code in Windows compiliere wird das Icon angezeigt)

Walter
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Programmicon

Beitrag von ts-soft »

Waldixxl hat geschrieben:Hallo

und wie mache ich das unter Linux, bei mir wird das Icon leider nicht angezeigt.
(wen ich den gleichen Code in Windows compiliere wird das Icon angezeigt)

Walter
Das wird auch nicht unterstützt. Unter Linux werden Icons auch unter den meisten Themes nicht unterstützt,
und wenn, dann befinden sich die Icons nicht in der Exe, sondern in dem zuständigem Systemordner für
shared icons.

Die Möglichkeit ein Icons zur Exe hinzuzufügen besteht aber dennoch, hierzu mal ein
Beispielcode aus dem engl. Forum, Autor und link sind mir leider nicht bekannt, hier
mußt Du wohl selber noch mal suchen.

Code: Alles auswählen

 ;** Created by Icon Creator
;** Tested with Ubuntu 9.10 (32-bit)
;** www.RE-Applications.be

Structure PixData
  magic.l
  length.l
  pixdata_type.l
  rowstride.l
  width.l
  height.l
  pixel_data.l
EndStructure

ImportC ""
  gtk_window_set_icon(a.l, b.l)
  gdk_pixbuf_from_pixdata(a.l, b.l, c.l)
EndImport

Procedure SetWindowIcon(iWindow.i)
  Protected mIcon.PixData
  mIcon\magic = $47646B50
  mIcon\length = 749
  mIcon\pixdata_type = $2010002
  mIcon\rowstride = 64
  mIcon\width = 16
  mIcon\height = 16
  mIcon\pixel_data = ?WindowIcon

  lPixbuf.l = gdk_pixbuf_from_pixdata(mIcon, #False, lError.l)
  gtk_window_set_icon(WindowID(iWindow), lPixbuf)
EndProcedure

#frmTest = 1000
If OpenWindow(#frmTest, 50, 50, 150, 50, "Icon Test", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  SetWindowIcon(#frmTest)
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End

DataSection
  WindowIcon:
    Data.a 134,255,255,255,0,4,37,37,39,162,36,36,37,249,40,40,40,240,49,49,59,115,139,255,255,255,0,6,39,39,39,72
    Data.a 36,36,36,254,36,36,36,255,40,40,40,255,50,50,50,255,37,37,42,95,138,255,255,255,0,6,39,39,42,123,56,56
    Data.a 57,255,42,44,45,255,60,61,62,255,45,45,46,255,36,36,36,183,138,255,255,255,0,6,45,45,53,103,86,82,74,255
    Data.a 216,213,199,255,187,185,177,255,65,65,65,255,36,36,36,194,138,255,255,255,0,7,39,39,45,77,207,178,47,255,252,221
    Data.a 47,255,247,215,48,255,131,112,52,255,36,38,47,209,37,37,39,8,137,255,255,255,0,7,41,42,46,97,190,174,111,255
    Data.a 225,194,70,255,234,208,122,255,127,125,121,255,49,49,52,255,37,37,39,83,136,255,255,255,0,9,36,36,36,39,110,110
    Data.a 111,224,243,244,246,255,230,229,231,255,252,254,255,255,194,194,193,255,45,45,45,255,36,36,36,214,38,38,39,27,134,255
    Data.a 255,255,0,11,37,37,39,2,36,36,36,189,177,177,177,255,255,255,255,255,252,252,253,255,252,252,252,255,241,241,240,255
    Data.a 66,66,67,255,36,36,36,255,37,37,39,180,38,38,39,1,133,255,255,255,0,4,36,36,36,56,86,86,87,252,243,243
    Data.a 241,255,255,255,254,255,130,253,253,252,255,5,255,255,254,255,195,195,194,255,56,56,56,255,39,39,39,254,37,37,39,65
    Data.a 133,255,255,255,0,6,36,36,36,151,165,165,165,255,255,255,255,255,249,249,247,255,252,252,251,255,253,253,252,255,130,255
    Data.a 255,254,255,3,81,81,81,255,36,36,37,255,36,36,39,131,132,255,255,255,0,12,39,37,41,28,50,49,48,240,191,191
    Data.a 194,255,255,255,255,255,247,247,246,255,252,252,250,255,253,253,252,255,255,255,253,255,255,255,255,255,93,93,94,255,36,36
    Data.a 36,255,36,36,39,148,131,255,255,255,0,13,197,155,46,19,180,140,46,98,208,167,40,252,164,152,112,255,230,232,239,255
    Data.a 253,253,252,255,252,252,250,255,253,253,252,255,255,255,255,255,253,207,83,255,96,85,45,255,36,36,39,255,109,96,45,154
    Data.a 131,255,255,255,0,14,216,171,50,176,248,199,45,255,255,207,46,255,201,161,36,255,83,81,75,255,212,213,216,255,255,255
    Data.a 255,255,255,255,254,255,250,253,255,255,246,190,54,255,226,164,39,255,201,145,40,255,245,180,41,236,243,176,44,84,130,255
    Data.a 255,255,0,6,221,172,46,180,252,203,46,255,248,197,45,255,254,199,42,255,156,130,51,255,200,202,207,255,130,255,255,255
    Data.a 255,6,177,179,186,255,188,141,51,255,255,188,40,255,255,188,41,255,254,188,41,255,237,171,44,216,130,255,255,255,0,14
    Data.a 210,159,44,208,234,181,45,255,243,189,45,255,254,199,45,255,235,179,47,255,124,114,95,255,113,114,118,254,90,90,91,254
    Data.a 39,39,43,255,136,101,38,255,255,190,42,255,246,179,42,255,203,139,42,191,182,118,48,69,130,255,255,255,0,6,167,121
    Data.a 42,20,149,109,41,74,141,106,41,133,167,121,42,206,142,105,40,225,53,46,37,57,130,36,36,36,8,5,36,36,40,13
    Data.a 100,78,42,125,186,126,40,247,159,105,41,146,129,90,41,2,130,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0
    Data.a 0,0,0,0,0,0,0,0,208,142,175,8,0,0
EndDataSection
Ob der Code so noch funktioniert, kann ich leider auch nicht testen, mein Themes zeigt keine Programm-Icons an. Ich hoffe
es hilft Dir erstmal (die Einsicht der Überflüssigkeit eines solchen Icons unter Linux sollte da auch reichen :mrgreen: )

Gruß
Thomas

// edit:
hier noch ein Link zur korrespondierenden API:
http://developer.gnome.org/gdk-pixbuf/s ... -data.html
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: Programmicon

Beitrag von Waldixxl »

Hallo ts-soft

erst einmal Danke für Deine Hilfe
Der Code läuft auf 10.04 und auf Mint 12 jeweils 32 Bit einwandfrei.

Walter
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Programmicon

Beitrag von ts-soft »

Ich hoffe mal, Du findest auch den notwendigen Icon Creator, weil ich möchte den
ohne Erlaubnis des Autors, vor allem da der mir im moment garnicht bekannt ist, nicht
hier verlinken.

Hab es inzwischen unter XUbuntu x64 testen können, läuft also auch unter 64-Bit.
Man sollte die Structure aber besser anpassen:

Code: Alles auswählen

Structure PixData
  magic.l
  length.l
  pixdata_type.l
  rowstride.l
  width.l
  height.l
  *pixel_data
EndStructure
Vielleicht steht das ja mal nativ in PB zur Verfügung, ich meine mich zu erinnern, Freak hätte das
mal geplant.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Waldixxl
Beiträge: 108
Registriert: 27.12.2005 17:35
Wohnort: Linz, Österreich

Re: Programmicon

Beitrag von Waldixxl »

Hallo

Ich habe noch ein wenig im Netz gesucht und bin auf folgende Lösung gekommen.

Code: Alles auswählen

ImportC ""
  gtk_window_set_icon(a.l, b.l)
  gdk_pixbuf_new_from_file( a.s,b.l)
EndImport

Procedure SetWindowIcon(iWindow.i, Datei$)
  lPixbuf.l = gdk_pixbuf_new_from_file(Datei$, NULL)
  gtk_window_set_icon(WindowID(iWindow), lPixbuf)
EndProcedure

#frmTest = 0
If OpenWindow(#frmTest, 50, 50, 150, 50, "Icon Test", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
  SetWindowIcon(#frmTest, GetPathPart(ProgramFilename())+"Bild.png")
EndIf
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
End
gefällt mir viel besser :)
man muss nur darauf achten das die Datei gefunden wird. (beim testen das Bild, wenn nötig,in das tmp-Verzeichnis Kopieren)

Walter
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.

Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Programmicon

Beitrag von ts-soft »

:allright:
Macht was es soll und ist unkompliziert, gefällt mir!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Programmicon

Beitrag von Shardik »

Es geht sogar noch kürzer... :lol:

Code: Alles auswählen

IconPath.S = #PB_Compiler_Home + "examples/sources/Data/CdPlayer.ico"

OpenWindow(0, 0, 0, 300, 100, "<-- Changed titlebar icon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

gtk_window_set_icon_from_file_(WindowID(0), IconPath, IconError)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Dieses Beispiel hatte ich bereits in einer Crossplatform-Variante für Windows
und Linux im englischen Forum gezeigt...: :wink:
http://www.purebasic.fr/english/viewtop ... 07&start=9
Antworten