Seite 1 von 1

Programmicon

Verfasst: 24.12.2011 09:41
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

Re: Programmicon

Verfasst: 24.12.2011 10:57
von Ramihyn_
Unter dem Menü "Compiler->Compiler Options" einfach "Use Icon" anklicken und ein .ICO Bildchen auswählen (32x32 "üblicherweise").

Frohes Fest!

Re: Programmicon

Verfasst: 24.12.2011 11:13
von basicer
Klasse!

Vielen Dank und allen frohes Fest.

Re: Programmicon

Verfasst: 21.01.2012 17:46
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

Re: Programmicon

Verfasst: 21.01.2012 19:21
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

Re: Programmicon

Verfasst: 22.01.2012 13:10
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

Re: Programmicon

Verfasst: 22.01.2012 13:29
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

Re: Programmicon

Verfasst: 23.01.2012 20:09
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

Re: Programmicon

Verfasst: 23.01.2012 21:06
von ts-soft
:allright:
Macht was es soll und ist unkompliziert, gefällt mir!

Re: Programmicon

Verfasst: 24.01.2012 09:53
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