Icon in der Titelleiste ändern

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

pile

Betreff: Icon in der Titelleiste ändern

BeitragMo, März 19, 2007 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, weiß wer wie man das Icon in der Titelleiste ändern kann?
Wie man das Exe-Icon ändert weiß ich aber ich hab das in der Titelleiste noch nie hinbekommen.

Danke.
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%
 

Phlox

BeitragMo, März 19, 2007 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...hp?t=14671

Leider fehlt die richtige Userlib.

MfG QWERTZ
P.S.: Mich würde es auch interessieren...

pixelshooter

BeitragMo, März 19, 2007 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
da gibts ne dll für...
frag mich nich wie die heißt, aber hier im forum eingetragen ist sie

-edit- ups da war jmd schneller Wink
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc

pile

BeitragMo, März 19, 2007 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo danke soweit, aber weiß auch jemand wo ich die dll finden kann? Kann man die eventuell irgendwo im netz runterladen?
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

d-bug

BeitragMo, März 19, 2007 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Die DLL ist von BatRat und lag auf meinem Space, der aber jetzt nicht mehr existiert. Ich sagte ihm mehrfach, er solle die DLL woanders hosten, aber er tat es wohl nicht.

Weiter unten im Thread steht ein Code von x-pressive, der eigentlich nichts anderes macht als die DLL machte. Ich würde diesen auf jeden Fall bevorzugen, da er das beilegen einer extra DLL unnötig macht.

https://www.blitzforum.de/foru...191#160191

Bitte diesen Post von x-pressive gut durchlesen, damit ihr nichts vergesst Wink

pile

BeitragMo, März 19, 2007 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, danke habe ich übersehen bzw. als ich gesehen habe das die DLL fehlt hab ich gar nicht erst weitergelesen... Rolling Eyes

Code: [AUSKLAPPEN]

Und dazu noch diese .decls in den Userlib-Ordner, fertig:

User32.decls
.lib "user32.dll"
User32_GetActiveWindow%():"GetActiveWindow"
User32_SetClassLong%( hWnd, nIndex, dwNewLong ):"SetClassLongA"

Shell32.decls
.lib "Shell32.dll"
Shell32_LoadIcon%(hWND%,File$,Index%) : "ExtractIconA"




Was genau heißt das und wie mach ich das? Sorry kenn mich mit Dll´s und userlibs oder wie das heißt nicht aus.
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

pixelshooter

BeitragMo, März 19, 2007 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
in deinem blitz ordner unter userlibs erzeugst du eine neue datei mit der endung .decls. das was da steht, schreibst du darein Wink

Die datei dient dazu, den Blitz Befehlsraum zu erweitern und neue Befehle zu deklarieren. Das erste ist der neue Blitz Befehl, hinter dem : steht der name der entsprehcenden Funktion in der dll, die unter .lib weiter oben eingetragen wurde
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc
 

Michi

BeitragMo, März 19, 2007 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
du legst zwei einfache Textdateien (*.txt) im Ordner Blitz3D\Userlibs an und nennst die eine User32.decls und die andere Shell32.decls. Dann füllst du sie mit den jeweiligen Inhalten. Daraufhin werden die entsprechenden Befehle im BB-editor farbig makiert und du kannst sie benutzen wie ganz normale BB-Befehle.
EinizigerNachteil der Sache: Dieser Code ändert leider nicht das Icon in der Titelleiste des Fensters, sondern lediglich das symbol unten in der Taskleiste Rolling Eyes Das einzige was man damit sonst machen kann, ist wenn man die -14 bei Setclasslong durch eine -12 ersetzt wird das Symbol als Mauszeiger verwenden Very Happy Um das Symbol in der titelleiste zu ändern muss man Forgesofts Tipp unten verwenden, den ich bereits versucht habe umzusetzen aber nicht erfolgreich... Ich hab ihm ne PM geschrieben, vllt kann ich morgen oder so die lösung hier präsentieren.

Edit: Mist, war wer schneller
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

pile

BeitragMo, März 19, 2007 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Dankje für die Erklärungen!

Zitat:
Das einzige was man damit sonst machen kann, ist wenn man die -14 bei Setclasslong durch eine -12 ersetzt wird das Symbol als Mauszeiger verwenden Very Happy Um das Symbol in der titelleiste zu ändern muss man Forgesofts Tipp unten verwenden, den ich bereits versucht habe umzusetzen aber nicht erfolgreich... Ich hab ihm ne PM geschrieben, vllt kann ich morgen oder so die lösung hier präsentieren.

Also kann ich das nun doch vergessen? Na dann wart ich mal auf deine Lösung.[/code]
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

Silver_Knee

BeitragMo, März 19, 2007 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
bei B+ bei mir auf dem rechner hat die x-pressive methode gewirkt symbol in taskleiste und am fenster waren beide erstezt.

pile

BeitragDi, März 20, 2007 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja also ich hab das jetzt mal probiert. Ob das jetzt nun das Symbol in der Tasktleiste ersezt oder nicht, aber irgendwie bekomm ich das trotzdem nicht hin:

Code: [AUSKLAPPEN]

Function SetAppIcon(iconFile$)
        hwnd = User32_GetActiveWindow()
        icon = Shell32_LoadIcon(hwnd,iconFile$,0)
        User32_SetClassLong hwnd,-14,icon
End Function

Diese Function schreibe ich jetzt irgendwo, vor oder hinter der Hauptschleife.
Und wo kommt dann der Befehl
Code: [AUSKLAPPEN]
SetAppIcon(iconFile$)
hin mit dem ich die Funktion ausführe, vor oder in die Hauptschleife?
Und, wo in dieser Function gebe ich an wo sich meine .ico Datei befindet?
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

Vertex

BeitragDi, März 20, 2007 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hast du aber einiges an Mist gebaut ^^

Icon.decls
Code: [AUSKLAPPEN]
.lib "user32.dll"
User32_SetClassLong%(hWnd%, nIndex%, dwNewLong%) : "SetClassLongA"

.lib "Shell32.dll"
Shell32_ExtractIcon%(hInst%, lpszExeFileName$, nIconIndex%) : "ExtractIconA"


Code: [AUSKLAPPEN]
Const GCL_HICON% = -14

If SetAppIcon("MyIcon.ico") Then
   Print "Success"
Else
   Print "Failed"
EndIf

WaitKey()
End

Function SetAppIcon%(iconFile$, iconIndex%=0)
   Local hInstance%, hWindow%, hIcon%

   hInstance = Int(SystemProperty("AppHINSTANCE"))
   hWindow   = Int(SystemProperty("AppHWND"))

   hIcon = Shell32_ExtractIcon(hInstance, iconFile, iconIndex)
   If Not hIcon Then Return False

   User32_SetClassLong(hWindow, GCL_HICON, hIcon)
   Return True
End Function


Erstens sollte man nicht API Funktionen wie ExtractIcon ganz einfach mal in LoadIcon umbennen(LoadIcon gibt es ja schon in User32), zweitens nie das Window Handle(hWnd) mit GetActiveWindow ermitteln(es gibt nicht umsonst SystemProperty von Blitz) und drittens hätte man auch anhand der *.decls Datei sehen können, dass das Handle der Aplikationsinstanz und nicht das Handle des Fensters gefragt war.

Weiterhin müsste man das geladene Icon auch wieder zum Schluss freigeben. Das übernimmt Blitz selbstverständlich nicht. Siehe dazu DestroyIcon in User32.

Ansonsten kann man den Spaß natürlich überall im Code aufrufen. Die Instanz oder das Fenster geht ja nicht verloren.

mfg olli
vertex.dreamfall.at | GitHub
 

Michi

BeitragDi, März 20, 2007 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich muss mich mal ganz klar selbst lohnen: ich hab das ganze selbst rausgewurschtelt, ohne Kenntnisse von C++ oder anderem:

User32.decls:
Code: [AUSKLAPPEN]
.lib "user32.dll"
User32_SetClassLong%(hWnd%, nIndex%, dwNewLong%) : "SetClassLongA"
User32_SendMessage%(Hwnd, wMsg, wParam, lParam) : "SendMessageA"

Shell32.decls:
Code: [AUSKLAPPEN]
.lib "Shell32.dll"
Shell32_ExtractIcon%(hInst%, lpszExeFileName$, nIconIndex%) : "ExtractIconA"


Code: [AUSKLAPPEN]
SetAppIcon ("MyIcon.ico")
WaitKey()
End

Function SetAppIcon(iconFile$)
        hwnd = Int(SystemProperty("AppHWND"))
        icon = Shell32_ExtractIcon(hwnd,iconFile$,0)
        User32_SendMessage(hwnd, $80, 0, icon)
End Function


Das wars. Very Happy

(Geldspenden und anderweitige Zuwendungen sind immer willkommen Laughing )
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Vertex

BeitragDi, März 20, 2007 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Und immernoch ist es hInst und nicht hWnd Rolling Eyes
vertex.dreamfall.at | GitHub

pile

BeitragDi, März 20, 2007 22:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@Vertex: Wieso habe ich Mist gebaut? Ich habe den Code von jemand anderen kopiert. Ich verstehe kein Wort davon was das alles bedeuten soll. Ich nehme einfach den Code und hoffe das es irgendwie funktioniert.
Außerdem: Nachdem ich es so gemacht habe wie du geschrieben hast (bzw. deinen Code kopiert Wink und dann diese Icon.decls mit dem dazugehörigen Code, hat Blitz nicht mehr Compiliert.... Hab ich schon wieder was falsch gemacht?

@Michi: auch danke für deine Hilfe, aber dadurch wird bei mir trotzdem das Icon nicht ersezt Sad Oder wo muss ich die Icondatei abspeichern?
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%
 

Michi

BeitragMi, März 21, 2007 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm, also du musst da was falsch machen, bei mir gehts wunderbar.
Beweis:
http://scifi.pages.at/gece-emes/Beweis.jpg

Also das icon (Datei mit "ico"-endung) kannst du irgendwo speichern - du musst dann halt nur den richtigen Pfad angeben. (als einziger Parameter bei SetAppIcon()). Vertex zuliebe kannst du auch noch die variable hWnd ind hInst umbenennen - der form halber Rolling Eyes Wird aber nichts daran ändern was das programm macht. (ich habs aber auch gemacht) Ansonsten nochmal:
*.decls Dateien in den Bltz3D\Userlibs ordner
Der andere Code in den BB-Editor. Mehr ist eigentlich nicht dabei.
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Vertex

BeitragDo, März 22, 2007 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will ja nicht darauf herumhacken, aber nicht einfach nur umbennen sondern wirklich mit AppHINSTANCE auch arbeiten. Die Instanz des Programms ist nunmal was völlig anderes, als das Fensterhandle. Das sind dann solche Fehler, wo man sich wundert, warum es auf anderen Systemen nicht läuft, Memoryleaks entstehen usw.

mfg olli
vertex.dreamfall.at | GitHub

pile

BeitragDo, März 22, 2007 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Es will einfach nicht klappen:
http://creatorx.cr.funpic.de/Bilder/screen.jpg

An was kann es noch liegen?
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

Vertex

BeitragDo, März 22, 2007 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Spreche ich gegen Wände Question

Code: [AUSKLAPPEN]
Const GCL_HICON% = -14

Global Window%, Instance%, Icon%

Instance = Int(SystemProperty("AppHINSTANCE"))
Window   = Int(SystemProperty("AppHWND"))

Icon = Shell32_ExtractIcon(Instance, "icon.ico", 0)
If Not Icon Then
   Print("Failed to load Icon")
   WaitKey()
   End
EndIf

User32_SetClassLong(Window, GCL_HICON, Icon)
Print("Success")

WaitKey()
User32_DestroyIcon(Icon)
End()


Icon.decls
Code: [AUSKLAPPEN]
.lib "user32.dll"
User32_SetClassLong%(hWnd%, nIndex%, dwNewLong%) : "SetClassLongA"
User32_DestroyIcon%(hIcon%) : "DestroyIcon"

.lib "Shell32.dll"
Shell32_ExtractIcon%(hInst%, lpszExeFileName$, nIconIndex%) : "ExtractIconA"


So, und nur so, wird es gemacht. Alles andere steht auf wackeligen Beinen, dass es funktioniert.
vertex.dreamfall.at | GitHub

pile

BeitragDo, März 22, 2007 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist ja schön das es so bei dir funktioniert, aber ich habe ja schon weiter oben geschrieben, dass wenn ich die Icon.decls im Userlibs-Ordner habe, Blitz3D nicht compiliert. Nur wenn ich User32.decls wieder aus dem userlibs-Ordner entferne compiliert Blitz. Also entweder Shell32.decls und User32.decls ODER Shell32.decls und Icon.decls. Und wenn ich nur Icon.decls und Shell32.decls drin habe und compiliere dann öfnet sich das Fenster und es steht auch "Success" da aber das Icon wurde immernoch nicht geändert, siehe hier:
http://creatorx.cr.funpic.de/Bilder/screen2.jpg

Sorry wenn ich dich zur Weißglut treibe, aber wenn ihr schon den Code vorgebt und ich ihn einfach nur einkopiere und es dann trotzdem nicht funktioniert, kann wohl niemand etwas dafür.
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group