Seite 1 von 1

Ganzes Programm Tranzperent!

Verfasst: 09.07.2007 13:30
von Zantero
Hab zwar jetzt die Suche benutzt, aber da standen so spezielle Sachen. Meine Frage ist, ob ich mein Programm wie in Vista z.b http://www.win-news.de/screenshots/screen_catid,9.html hier vom 2 Bild der Rahmen. Nur nicht so verschwemt. Geth das mit den ganzen Programm?

Verfasst: 09.07.2007 14:39
von Zaphod
Ja, unverschwämmt geht das auf Win2k/XP, dazu musst du allerdings die WinAPI bemühen.

Verfasst: 09.07.2007 14:41
von RSBasic

Code: Alles auswählen

SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE) | #WS_EX_LAYERED) 
SetLayeredWindowAttributes_(WindowID(0), 0, (255 * 90) / 100, #LWA_ALPHA)

Verfasst: 09.07.2007 15:06
von Zantero
Ja fanke, also ich schreib jetzt mein Programm und füge dann den Code ein?

Verfasst: 09.07.2007 15:09
von vonTurnundTaxis
> Ja fanke, also ich schreib jetzt mein Programm und füge dann den Code ein?
Nein. Denn das Geth leider nicht Tranzperent!

Verfasst: 09.07.2007 15:16
von Zaphod
Wenn du mal ganz stark drüber nachdenkst, wirst du selbst draufkommen, was ein guter Zeitpunkt ist um das Fenster transparent zu schalten...

Irgendwann nach dem erzeugen des Fensters und vor den schließen des Fenster klingt nach einer guten Idee, oder?

Verfasst: 09.07.2007 15:22
von Kiffi
Zantero hat geschrieben:Ja fanke
Fitte!

Verfasst: 09.07.2007 16:09
von PureLust
Zwar nur gefaked ... aber vielleicht reicht's ja für Deine Zwecke. ;)

Code: Alles auswählen

EnableExplicit

Procedure CallBack(WindowID, Message, wParam, lParam)
	Protected region
	Static OldWidth, OldHeight
	If Message = 70
		MoveWindow_(WindowID(1),WindowX(0)+22,WindowY(0)+48,WindowWidth(0)-38,WindowHeight(0)-78,-1)
		If WindowWidth(1) <> OldWidth Or WindowHeight(1) <> OldHeight
			region=CreateRoundRectRgn_(0,0,WindowWidth(1)-1,WindowHeight(1)-1,20,20) 
			SetWindowRgn_(WindowID(1),region,#True) 
			DeleteObject_(region)
			OldWidth = WindowWidth(1)
			OldHeight = WindowHeight(1)
		EndIf
	EndIf
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, 200, 200, 300, 250, "Tansparentes Fenster mit Schatten", #PB_Window_SystemMenu | #PB_Window_SizeGadget|#PB_Window_Invisible ) 
	If CreateGadgetList(WindowID(0))
		ButtonGadget(0,30,WindowHeight(0)-40,WindowWidth(0)-60,20,"I'm transparent")
	EndIf
	
	
	#CS_DROPSHADOW = $00020000 
	SetClassLong_(WindowID(0),#GCL_STYLE, #CS_DROPSHADOW)
	SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE) | #WS_EX_LAYERED) 
	SetLayeredWindowAttributes_(WindowID(0), 0, (255 * 65) / 100, #LWA_ALPHA)
	OpenWindow(1,WindowX(0)+22,WindowY(0)+48,260,160,"ChildWindow",#PB_Window_BorderLess|#PB_Window_Invisible,WindowID(0))
	SetClassLong_(WindowID(1),#GCL_STYLE, #CS_DROPSHADOW)
	If CreateGadgetList(WindowID(1))
		ButtonGadget(1,30,WindowHeight(1)-40,WindowWidth(1)-60,20,"I'm not transparent")
	EndIf

	HideWindow(1, 0) 
	HideWindow(0, 0) 
	
	CallBack(0,70,0,0)
	SetWindowCallback(@CallBack(),0)
	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
PS: Wenn vielleicht jemand die genaue Filterung für einen Window-Move in der CallBack-Message kennt, könnte ich das noch mal sauber nachrüsten - momentan isses nur dirty getrickst. :roll:

Gruß, PL.