Icon in der Titelleiste ändern
Übersicht

Michi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Vertex: Lustig das du fragst ob du gegen Wände redest: Ich hatte schon ganz am Anfang gesagt, das SetClassLong das Symbl oben links NICHT ersetzt, sondern lediglich das unten in der Taskleiste:
http://scifi.pages.at/gece-emes/Beweis2.jpg (mit deinem Code!) Um das Symbol "richtig" zu ersetzen, muss man SendMessage nehmen. Hier noch mal der überarbeitete Code (diemal mit Fehlermeldung und korrekter Unterscheidung von Programminstanz und Fenster): Code: [AUSKLAPPEN] hWnd=Int(SystemProperty("AppHWND"))
hInst=Int(SystemProperty("AppInstance")) Icon=Shell32_ExtractIcon(hInst,"D:\symbole\down.ico",0) If Icon=0 Then Print "Couldn't load icon" Else Print "Icon succesfully loaded" EndIf User32_SendMessage(hWnd, $80, 0, icon) WaitKey() User32_DestroyIcon(icon) End @pile: Wo bekommt man so einen hübschen Skin her? |
||
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968 Code: [AUSKLAPPEN] __ <_/__\_> <--- die Wayne-Zeichnung |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Michi, jo, da weiß ich bloß nicht, warum du dann SetClassLong im darauffolgenden Code benutzt hast.
pile: Blitz3d kompiliert, besser gesagt linkt das Programm nicht, wenn externe Funktionen mehrmals integriert werden sollen. Hast du also andere Userlibs im Ordner, die auf die selben Bibliotheken/Funktionen zugreifen, dann kommt es halt zu Problemen. Mir ist jetzt auch aufgefallen, dass du anscheinend Vista benutzt. Also versuche es mal über SendMessage wie Michi beschrieben. Die Server von MSDN sind gerade ausgelastet, so dass ich nicht nachlesen kann, was $80 wieder für eine Konstante ist. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ne ich nutze kein Vista, das ist WinXP mit dem Vista StylePack 3.0, also n XP mit nem Skin, nix anderes.
@Vertex: Du hast geschrieben: Zitat: ...wenn externe Funktionen mehrmals integriert werden... aber der Code kommt doch von dir (bzw ich habe ihn von dir kopiert, wie kann sich denn da so ein Fehler einschleichen das es z.B. doppelt-gemoppelte Funktionne gibt?
@Michi: Ich habe jetzt deinen "neuen" Code genommen und Icon.decls wieder rausgeschmissen (richtig so?). Zuerst hat Blitz rumgezickt, da der die Funktion Code: [AUSKLAPPEN] User32_DestroyIcon(icon)[/quote] nicht gefunden hat. Also habe ich die Zeile auskommentiert (das ist die Vorlezte, über dem "end") und dann hat es geklapt. Da stand dann auch "Icon succesfully loaded" im Fenster, aber das Icon wurde immernoch nicht ersezt. Ich werd nochmal verückt ^^
|
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
Michi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
am besten löschst du mal alle *.decls dateien, und machst zwei neue:
Shell32.decls: Code: [AUSKLAPPEN] Shell32.dll"
Shell32_ExtractIcon%(hInst%, lpszExeFileName$, nIconIndex%) : "ExtractIconA" User32.decls: Code: [AUSKLAPPEN] .lib "user32.dll"
User32_SendMessage%(hWnd, wMsg, wParam, lParam) : "SendMessageA" User32_DestroyIcon%(hIcon) : "DestroyIcon" Und wenn es dann nicht klappt... Ich denk dann werd ich wahnsinnig! |
||
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968 Code: [AUSKLAPPEN] __ <_/__\_> <--- die Wayne-Zeichnung |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab ich so gemacht. Jetzt meckert Blitz zwar nicht mehr bei Code: [AUSKLAPPEN] User32_DestroyIcon(icon) aber es geht immernoch nicht.
Das was aber wirklich komisch ist: Das Icon scheint geladen zu werden, also es steht da: Code: [AUSKLAPPEN] Icon succesfully loaded . Und wenn ich mal ne "falsche" Datei angebe, also eine die es nicht gibt, steht da auch Code: [AUSKLAPPEN] Couldn't load icon Ich glaub auch das ich bald Wahnsinnig werde.... |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann liegt es am Skin vermute ich mal. Geht es denn mit dem normalen XP Skin? | ||
vertex.dreamfall.at | GitHub |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich probiere es morgen mal auf einem anderen Rechner. | ||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habs auf nem anderen Rechner ausprobiert, also auch dort kompiliert. Trotzdem funktionierst nicht. Auch da wird das Icon irgendwie geladen,. aber dennoch nicht angezeigt.
Hm, ok wenn es so nicht gehen will, gibt es eventuell die Möglichkeit die Titelleiste verschwinden zu lassen, und wenn ja auch ne Möglich keit es so zu programmieren, dass man trotz entfernter Titelleiste das Fenster verschieben kann mit der Maus? Denn so würde ich mir einfach meine eigene Titelleiste machen. |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier noch ein weiterer Code. Wenn der nicht geht, weiß ich auch nicht mehr weiter:
Code: [AUSKLAPPEN] Const WM_SETICON% = 128
Const ICON_BIG% = 1 Const ICON_SMALL% = 2 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_SendMessage(Window, WM_SETICON, ICON_SMALL, Icon) User32_SendMessage(Window, WM_SETICON, ICON_BIG, Icon) Print("Success") WaitKey() User32_DestroyIcon(Icon) End() Zitat: An application sends the WM_SETICON message to associate a new large or small icon with a window. The system displays the large icon in the ALT+TAB dialog box, and the small icon in the window caption.
Das mit der Titelleiste ist Quatsch. Das würde ich keinem Benutzer zumuten. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch da: Icon wird geladen, aber nicht angezeigt. Arrg.... ![]() |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann mir einer eventuell sagen, wie ich das mit CallDLL realisieren könnte ? Wäre sehr lieb von euch ![]() |
||
°_° °.° °~° °v° .. -.- |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Matrix wenn du rausbekommst wie es mit CallDLL geht küss ich dich ![]() Achja, ich hab jetzt mal ne .exe erstellt. Zu der Zeit als ich kompiliert habe, war das icon vorhanden, also es steht im Fenster "Success". Dann habe ich das Icon wieder rausgeschmissen und die .exe ausgeführt. Da steht immernoch "Success". Nehmen wir mal an alles funktioniert wie es soll und ichs ehe das Icon in der Titelleiste auch mal ^^: Heißt das, beim Kompilieren muss sich das Icon natürlich im Ordner befinden und durch das Kompilieren wird es quasi in die .exe "eingebrannt" und das "Icon-File" selbst wird nicht mehr benötigt? |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
pixelshooter |
![]() Antworten mit Zitat ![]() |
---|---|---|
jep, das icon wird "eingebrannt". du kannst es mit nem ressource hacker abspeichern/ändern | ||
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
pile: Lade mal deine Icon Datei hoch, das will ich einfach nicht glauben.
Ansonsten ist nur das Icon der Exe Datei als Ressource vorhanden. Das Icon im Fenster und in der Taskbar lässt sich nicht mit dem RessourceHacker ändern. TheMatrix: Das geht von Haus aus nicht. CallDll kann nur Blitz-DLLs aufrufen. Diese DLLs sind wie normale DLLs mit dem unterschied, dass sie eine feste Parameterliste haben(In, InSize, Out, OutSize). Ich kenne keine WinAPI Funktion, die die gleich Parameterliste besitzt. Ausweg schafft nur eine WrapperDLL, die die WinAPI Funktion aufruft. Und das Icon wird auch nicht "eingebrannt". Es wird ähnlich eines Images Windows intern geladen(deswegen ist auch DestroyIcon wichtig). Die Zuweisung des Icons an das Fenster ändert nicht die Exe Datei. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn es nicht "eingebrannt" sondern bei jedem Programmstart neu aus der Datei geladen wird, warum stand dann immernoch "Success" da als ich die Datei entfernt hatte?
Hier das Icon: http://creatorx.cr.funpic.de/Bilder/sp.ico Kann mir aber nicht vorstellen das es am Icon selbst liegt, da ich auch andere probiert habe.... |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geht hier wunderbar:
![]() Zitat: Wenn es nicht "eingebrannt" sondern bei jedem Programmstart neu aus der Datei geladen wird, warum stand dann immernoch "Success" da als ich die Datei entfernt hatte?
Bei mir steht kein Success mehr da, wenn ich das Icon gelöscht habe. Das muss eigentlich gehen. Pass auf, du verschiebst mal den Inhalt von userlibs und erstells darin die einzige Datei Icon.decls: Code: [AUSKLAPPEN] .lib "user32.dll"
User32_SetClassLong%(hWnd%, nIndex%, dwNewLong%) : "SetClassLongA" User32_SendMessage%(hWnd%, wMsg%, wParam%, lParam%) : "SendMessageA" User32_DestroyIcon%(hIcon%) : "DestroyIcon" .lib "Shell32.dll" Shell32_ExtractIcon%(hInst%, lpszExeFileName$, nIconIndex%) : "ExtractIconA" Und dann führst du folgenden Code nochmal aus: Code: [AUSKLAPPEN] Const GCL_HICON% = -14
Const WM_SETICON% = 128 Const ICON_BIG% = 1 Const ICON_SMALL% = 2 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) User32_SendMessage(Window, WM_SETICON, ICON_SMALL, Icon) User32_SendMessage(Window, WM_SETICON, ICON_BIG, Icon) ;User32_SendMessage(Window, WM_SETICON, 0, Icon) Print("Success") WaitKey() User32_DestroyIcon(Icon) End() Sollte das nicht gehen, entkommentierst den ersten Kommentar, probierst dann den zweiten und probierst. Dann alle beide und probierst. mfg olli |
||
vertex.dreamfall.at | GitHub |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group