Seite 8 von 8

Verfasst: 16.03.2006 16:34
von nicolaus
125 hat geschrieben:Hi,
kanns gerade nicht testen aber auf meinen Testrechnern in der Schule hatte ich das Problem nicht. Allerdings muss ich meinen Code nochmal anpassen, so wie er ist läuft er nur auf nicht geskinnten XP, (für mein WoW Design müsste ich dann ja ne andere RGB eintragen...) kann man die Farbe irgendwie schnell und zuverlässig ermitteln?

mfg
125
Habe deinen Code mal angepasst sodas die farbe jetzt auch stimmt

Code: Alles auswählen


;Benötigt um das Fenster der höhe und der weite des Desktops anzupassen
ExamineDesktops()
#WS_EX_LAYERED = $00080000
;-Unsere Constanten
Enumeration
#ParentWindow
#ChildWindow
#TextGadget
EndEnumeration

;-Unsere Procedure zum setzen der Transparenten Farbe  (angegeben mit RGB(R,G,B))
Procedure SetWinTransparency(win,color)
  If level>=0 And level<=100
        SetWindowLong_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000) ; #WS_EX_LAYERED = $00080000
        SetLayeredWindowAttributes_(WindowID(win),color,0,1)
  EndIf

EndProcedure

;-ParentWindow damit nichts in der Taskleiste erscheint
;OpenWindow(#ParentWindow,0,0,DesktopWidth(0),DesktopHeight(0),#PB_Window_Invisible,"PaintonDesk")

;-Unser Fenster mit dem wir auf den Desktop malen wollen
OpenWindow(#ChildWindow,0,0,DesktopWidth(0),DesktopHeight(0),#PB_Window_BorderLess|#PB_Window_Invisible,"PaintonDesk",GetDesktopWindow_()) ;WindowID(#ParentWindow))
;Textgadget zum Text anzeigen
CreateGadgetList(WindowID(#ChildWindow))
TextGadget(#TextGadget,0,0,200,200,"")
;Window auf Layered Window umschalten
SetWindowLong_(WindowID(#ChildWindow),#GWL_EXSTYLE,#WS_EX_LAYERED | #WS_EX_TRANSPARENT)
;Transparenz auf die Windows Standard Fensterfarbe setzen
SetWinTransparency(#ChildWindow,GetSysColor_(#COLOR_BTNFACE))
;Fenster fixieren
SetWindowPos_(WindowID(#ChildWindow),#HWND_BOTTOM,0,0,0,0,#SWP_NOMOVE|#SWP_NOREPOSITION|#SWP_NOSIZE)
;Fenster anzeigen
HideWindow(#ChildWindow,0)
 
 
Repeat
;-Zeit auf Desktop einblenden
SetGadgetText(#TextGadget,FormatDate("%hh:%ii:%ss",Date()))
;Was gegen die CPU Auslastung machen
Delay(10)
Until WindowEvent()=#PB_Event_CloseWindow
Jedoch habe ich dennoch ein prob mit dem Code und der technik.
Und zwar liegt das fenster auch nicht HINTER den icons und wenn ich nun mehr als die kleine UHR da drauf darstelle sehe ich meine icon´s auf dem dektop nit mehr (man sieht nur wie sich der mauspfeil zur Hand ändert wenn ich über nem icon bin).

das Fenster sollte doch aber hinter den icons liegen sodas man die Icons noch immer voll sehen kann. Dies geht so wie ich es bis jetzt rasugefunden habe nur mit DirectX (siehe das beispiel was ich gepostet habe).

Ich hatte auch schon mal den Weg versucht den Daniel auch versucht hat mit FindWindowEx_() jedoch gehts auch da nit da ich dann zwar ein DC Handle bekomme jedoch auf dieses kein Context mit wglCreateContext_() erstellen kann (rückgabe ist immer 0) und somit kann ich auch mit OpenGL nix machen ohne Context.

Mal sehen ob ich noch mit meinem OpenGL ne lösung finde....

Gruß,
Nico

Verfasst: 16.03.2006 16:54
von Leonhard
Bei mir kommt nix auf dem Desktop.
Das einzige is nen programm in der Titelleiste.

Verfasst: 16.03.2006 16:55
von Daniel P.
Das Fenster ist eben auch nur ein Fenster und verhält sich - bis auf das Empfangen von Benutzereingaben - ganz normal. Du wirst es nicht hinter die Icons bekommen. Wie gesagt, für meine kleinen Ausgaben ist es in Ordnung, da sind die Icons größer als das Fenster und mit einer Transparenz geht das auch in Ordnung. Hast du denn keinen weißen Rand um die ausgebenen Buchstaben, wenn du eine andere als die Standard-Schriftart verwendest. Transparenten Hintergrund unterstützt das TextGadget bzw. GDI nicht richtig...

Gruß

Verfasst: 16.03.2006 17:00
von nicolaus
@Leohard
stell deine desktopfarbe mal nit auf schwar dann siehst du oben links ne uhr.

@all

also ich bin der meinung das es, wenn man es nicht mit DirectX machen will (so iwe ich) und es hinter den Icon´s darstellen will, nur einen Weg gibt und der ist das ganze über Shell Replacement zu realisieren.

Das wird natürlich nit ganz so einfach aber ich werd mal versuchen mich in das thema ein zulesen und mal schauen das was bei rauskommt.

Verfasst: 17.03.2006 15:40
von Daniel P.
So, ich habe gestern abend das Beispiel von 125 bzw. das neue Beispiel von nicolaus ausprobiert. Es hat auch das Problem, dass um die Schrift ein Rand mit der Farbe des Fensterhintergrunds gezeichnet wird. Sieht man vor allem dann, wenn die Uhr auf einen dunklen Hintergrund plaziert wird. Also muss GDI+ 100%ig verwendet werden :freak: