(BlitzPlus) - Transparente Fenster unter Windows 2000/XP

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Eisbaer

Betreff: (BlitzPlus) - Transparente Fenster unter Windows 2000/XP

BeitragSo, Jul 20, 2008 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Transparenter Fenster Effekt für Windows 2000/XP oder höher.

Ähnlich dem "Aero Glass" Design für Windows Vista.


Demo Vorschau:
user posted image



Code: [AUSKLAPPEN]

;--------------------------------------------------------------------------
; Transparente Fenster unter Windows 2000/XP                 
;                                                                                
; 2008 Eisbaer Solution   (www.eisbaer-solution.de)   
;                                                                                             
; Blitz Plus V 1.37                         
;                            
;--------------------------------------------------------------------------


win = CreateWindow( "Transparenz", 200, 200, 400, 300, 0, 1 + 32 )

Global GWL_EXSTYLE  = -20 
Global WS_EX_LAYERED = $80000
Global hwnd

; Einstellbare Werte für Transparenz Effekt.

Global farbtrans = 0  ;Einzellne angegebene Farbe Transparent Schalten.

Global alpha = 180    ; ( 0 bis 255) 0 = unsichtbar  255 = undurchsichtig

Global lwa_alpha = 2 


; Fenster Handle ermitteln.

hwnd = QueryObject (win, 1)

; Ermitteln ob erweiterter Fensterstil WS_EX_LAYERED gesetzt wurde.

lExStyle = api_GetWindowLong(hwnd, GWL_EXSTYLE)

; Den Wert um WS_EX_LAYERED erweitern, wenn nicht gesetzt.

lExStyle = lExStyle Or WS_EX_LAYERED

; Wert dem Fenster zuweisen.

api_SetWindowLong hwnd, GWL_EXSTYLE, lExStyle

; Fenster Transparent schalten.

api_SetLayeredWindowAttributes(hwnd, farbtrans, alpha, lwa_alpha)



While True
WaitEvent( )

If EventID( ) = $803 Then

; Erweiterten Fenster Handle Entfernen.

lExStyle = api_GetWindowLong(hWnd, GWL_EXSTYLE)

lExStyle = 0

api_SetWindowLong hWnd, GWL_EXSTYLE, lExStyle


End
EndIf
Wend


;---------------------------------------------------------------------
;API            
; user32.decls   
;---------------------------------------------------------------------

; api_GetWindowLong% (hwnd%, nIndex%) : "GetWindowLongA"
; api_SetWindowLong% (hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA"         
; api_SetLayeredWindowAttributes (hWnd%, crKey%, bAlpha%, dwFlags%) : "SetLayeredWindowAttributes"

DAK

BeitragSo, Jul 20, 2008 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr schade, dass das nur unter b+ geht... schaut gut aus...
Gewinner der 6. und der 68. BlitzCodeCompo
 

Gast

BeitragSo, Jul 20, 2008 15:17
Antworten mit Zitat
Cool!
Das loässt sich verwerten!

Willi die Rübe

BeitragSo, Jul 20, 2008 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Müsste man doch eigentlich auch in B3D einbauen können. Das Windowhandle kriegt man auch mit GetActiveWindow.
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon
Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX

At the Farewell Party visit: MySpace | Homepage
 

Gast

BeitragSo, Jul 20, 2008 17:06
Antworten mit Zitat
Klar geht das, nur mit Bugs!
Ich habs mal umgecodet

Code: [AUSKLAPPEN]
;--------------------------------------------------------------------------
; Transparente Fenster unter Windows 2000/XP                 
;                                                                               
; 2008 Eisbaer Solution   (www.eisbaer-solution.de)
;
; Blitz3D Mod von Flitztuete95
;                                                                                             
; Blitz3D 1.99                       
;                           
;--------------------------------------------------------------------------



Global GWL_EXSTYLE  = -20
Global WS_EX_LAYERED = $80000
Global hwnd = SystemProperty("AppHWND")

; Einstellbare Werte für Transparenz Effekt.

Global farbtrans = 0  ;Einzellne angegebene Farbe Transparent Schalten.

Global alpha = 180    ; ( 0 bis 255) 0 = unsichtbar  255 = undurchsichtig

Global lwa_alpha = 2


; Fenster Handle ermitteln.


; Ermitteln ob erweiterter Fensterstil WS_EX_LAYERED gesetzt wurde.

lExStyle = api_GetWindowLong(hwnd, GWL_EXSTYLE)

; Den Wert um WS_EX_LAYERED erweitern, wenn nicht gesetzt.

lExStyle = lExStyle Or WS_EX_LAYERED

; Wert dem Fenster zuweisen.

api_SetWindowLong hwnd, GWL_EXSTYLE, lExStyle

; Fenster Transparent schalten.

api_SetLayeredWindowAttributes(hwnd, farbtrans, alpha, lwa_alpha)



While Not KeyDown(1)
ClsColor Rand(255),Rand(255),Rand(128)
Cls
Wend


Viel Spa$

ToeB

BeitragSo, Jul 20, 2008 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal ne doofe frage : Woher krigt ich decls und dll ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

ChristianK

BeitragSo, Jul 20, 2008 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Decls steht unten im Quelltext drin, die DLL ist bei Windows dabei. Smile
Das passt btw besser ins "DLLs und Userlibs"-Forum.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

ToeB

BeitragSo, Jul 20, 2008 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Was muss ich denn da Kopieren von den decls ? Einfach kopieren und in die DECLS reinschreiben, und dann funtzt es? Also alles was unten drunter in Komenntar setht ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

ChristianK

BeitragSo, Jul 20, 2008 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach die letzten 3 Zeilen und darüber: .lib "user32.dll" in die Decls schreiben.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

ToeB

BeitragSo, Jul 20, 2008 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Also...

In meine decls datei steht jetzt :
Code: [AUSKLAPPEN]
user32.decls
api_GetWindowLong% (hwnd%, nIndex%) : "GetWindowLongA" 

api_SetWindowLong% (hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA"   
api_SetLayeredWindowAttributes (hWnd%, crKey%, bAlpha%, dwFlags%)

:"SetLayeredWindowAttributes


Und dann will ich das prog starten ; Fehlermeldung !

Zitat:
Error in userlib 'user32.decls' - Function decl without lib diretive


Was heißt das ? Was hab ich falsch gemacht ??

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Blackside

BeitragSo, Jul 20, 2008 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst anstatt:
Code: [AUSKLAPPEN]
user32.decls


Code: [AUSKLAPPEN]
.lib "user32.dll"

schreiben

MFG Blackside
Hier sollte eigentlich eine Signatur stehen!

Silver_Knee

BeitragSo, Jul 20, 2008 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
ersetze
Code: [AUSKLAPPEN]
; Fenster Handle ermitteln.

hwnd = QueryObject (win, 1)

durch
Code: [AUSKLAPPEN]
; Fenster Handle ermitteln.

hwnd = SystemProperty$ ("AppHWND")


für B3D

Smile

Hip Teen

BeitragMo, Jul 21, 2008 8:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool wäre noch, wenn du das ganze in eine Funktion packst - dann hast du den gleichen Code erstellt, den ich auch mal im englischen Code Archiv hochgeladen habe Very Happy
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

Eisbaer

BeitragMo, Jul 21, 2008 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Hip Teen

Mann kann ja nicht alles wissen, ist ja schön wenn gewissen Ideen unabhängig von einander geboren werden.

Hauptsache sie werden ins Forum übertragen, damit alle was davon haben.

Und so, hat nun auch die deutsche Community dieses Feature als Code Vorlage.

Grüße Eisbaer
 

sxt-ghjl

BeitragDi, Jul 20, 2010 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
K, der Thread hier ist zwar schon etwas älter, aber ich denk mal, dass ich nicht extra ´nen neuen aufmache, zumal mein Prob ja auch direkt hiermit zusammenhängt. ^^

Also, ich hab den Blitz3D-Code, der von flitztuete95 aus dem BlitzPlus-Code umgeschrieben wurde, in meine B3D-Vollversion gepasted ->
Code: [AUSKLAPPEN]
;--------------------------------------------------------------------------
; Transparente Fenster unter Windows 2000/XP                 
;                                                                               
; 2008 Eisbaer Solution   (www.eisbaer-solution.de)
;
; Blitz3D Mod von Flitztuete95
;                                                                                             
; Blitz3D 1.99                       
;                           
;--------------------------------------------------------------------------



Global GWL_EXSTYLE  = -20
Global WS_EX_LAYERED = $80000
Global hwnd = SystemProperty("AppHWND")

; Einstellbare Werte für Transparenz Effekt.

Global farbtrans = 0  ;Einzellne angegebene Farbe Transparent Schalten.

Global alpha = 180    ; ( 0 bis 255) 0 = unsichtbar  255 = undurchsichtig

Global lwa_alpha = 2


; Fenster Handle ermitteln.


; Ermitteln ob erweiterter Fensterstil WS_EX_LAYERED gesetzt wurde.

lExStyle = api_GetWindowLong(hwnd, GWL_EXSTYLE)

; Den Wert um WS_EX_LAYERED erweitern, wenn nicht gesetzt.

lExStyle = lExStyle Or WS_EX_LAYERED

; Wert dem Fenster zuweisen.

api_SetWindowLong hwnd, GWL_EXSTYLE, lExStyle

; Fenster Transparent schalten.

api_SetLayeredWindowAttributes(hwnd, farbtrans, alpha, lwa_alpha)



While Not KeyDown(1)
ClsColor Rand(255),Rand(255),Rand(128)
Cls
Wend


und in eine *.txt Folgendes geschrieben:

Zitat:
.lib "user32.dll"
api_GetWindowLong% (hwnd%, nIndex%) : "GetWindowLongA"
api_SetWindowLong% (hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA"
api_SetLayeredWindowAttributes (hWnd%, crKey%, bAlpha%, dwFlags%) :"SetLayeredWindowAttributes


Und diese txt hab ich in user32.decls umgetauft und mit der user32.dll in den Userlibs-Ordner von Blitz3D kopiert. Allerdings passiert jetzt nichts, wenn ich die *.bb ausführe bzw. "Function 'api_getwindowlong' not found" wird als Fehlermeldung ausgegeben... Was mache ich noch falsch?

D2006

Administrator

BeitragDi, Jul 20, 2010 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
B3D neugestartet?
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Pummelie

BeitragDi, Jul 20, 2010 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hast eine dert Grund Komponenten von Windows in den Userlib Ordner gepackt Shocked

Lösche diese, und probiere es dann.
It's done when it's done.

Eingeproggt

BeitragDi, Jul 20, 2010 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Dir fehlt einfach ein Anführungszeichen am Ende der letzten Funktion in der decls.

Bei mir geht der Code dann. Aber er ist leider nicht ganz so nützlich... verschieb mal das so erstellte Fenster....
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

sxt-ghjl

BeitragDi, Jul 20, 2010 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, schon mal ein Danke für die schnellen Antworten! ^^

Allerdings möchte es immer noch nicht...

Hab jetzt also die user32.dll aus dem Userlibs-Ordner gelöscht und in user32.decls das hier stehen

Code: [AUSKLAPPEN]
.lib "user32.dll"
api_GetWindowLong% (hwnd%, nIndex%) : "GetWindowLongA"
api_SetWindowLong% (hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA"   
api_SetLayeredWindowAttributes (hWnd%, crKey%, bAlpha%, dwFlags%) :"SetLayeredWindowAttributes"


Aber nach wie vor -> Function 'api_getwindowlong' not found

...Schade ^^*
Weiß sonst noch jemand Rat?
 

sxt-ghjl

BeitragDi, Jul 20, 2010 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich andere Beispiele mit *.decls und *.dlls versuche, gibt es auch immer wieder Fehlermeldungen. Könnte es sein, dass bei mir allgemein kein Zugriff auf *.dlls möglich ist?

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group