Auf Desktop zeichnen...
Um ganz ehrlich zu sein ich habe es jetzt erst getestet. Vorhin habe ich es einfach geglaubt.
So leid es mir tut aber ich habe da eine schlechte Nachricht.
Unter 3.94 und 4.0 werden bei mir die Klicks zwar weiter geleitet aber ich sehe Dein Fenster.
Bei dem Code von 125 sehe ich unter beiden nichts - allerdings auch nichts in der Taskleiste und die PureBasic-IDE scheint ein bis zwei Pixel höher zu werden.
So leid es mir tut aber ich habe da eine schlechte Nachricht.
Unter 3.94 und 4.0 werden bei mir die Klicks zwar weiter geleitet aber ich sehe Dein Fenster.
Bei dem Code von 125 sehe ich unter beiden nichts - allerdings auch nichts in der Taskleiste und die PureBasic-IDE scheint ein bis zwei Pixel höher zu werden.
Alles beabsichtigt wenn du beim Transparenz setzen einen höheren Wert angibst wird das Fenster sichtbar werden (direkt aufm Desktop)... und auch die Schrift....uweb hat geschrieben: Bei dem Code von 125 sehe ich unter beiden nichts - allerdings auch nichts in der Taskleiste und die PureBasic-IDE scheint ein bis zwei Pixel höher zu werden.
Und das bei Daniel P.s Code das Fenster nicht transparent wird ist nur weil er die stärke der Transparenz nicht setzt...
Ma schauen ob ich morgen nen weg finde die Schrift aufs 100% Transparente Fenster zu painten....


@uweb:
Richtig, dass das Fenster bei mir noch angezeigt wird, war beabsichtigt. Das sollte demonstrieren, dass die Klicks tatsächlich durchgehen.
@125:
Das ist relativ einfach (zumindest nach SDK, ausprobiert hab ich es noch nicht). SetLayeredWindowAttributes_() kennt zwei Transparenz-Modi. Die eine ist die, die du angewendet hast und die andere macht nur eine bestimmte Farbe durchsichtig. Wenn man zum Beispiel den Fensterhintergrund rosa macht und über SetLayeredWindowAttributes_() sagt, dass Rosa transparent dargestellt werden soll, schneidet Windows alle Bereiche im Fenster heraus, die Rosa sind. Eine schwarze Schrift würde dann praktisch "schweben".
@all:
Das Problem mit RedrawWindow habe ich auch gelöst. Ich erzeuge nun das Fenster hidden, manipuliere die ExStyle-Eigenschaften und blende es dann ein. Kann heute abend mal einen neueren Code senden. Übrigen kann man auch Gadgets im Fenster plazieren. So kann man sich das herumgemale mit der GDI sparen (GDI+ ist eh besser, habs aber noch nicht zum laufen gebracht)...
Gruß
Richtig, dass das Fenster bei mir noch angezeigt wird, war beabsichtigt. Das sollte demonstrieren, dass die Klicks tatsächlich durchgehen.
@125:
Das ist relativ einfach (zumindest nach SDK, ausprobiert hab ich es noch nicht). SetLayeredWindowAttributes_() kennt zwei Transparenz-Modi. Die eine ist die, die du angewendet hast und die andere macht nur eine bestimmte Farbe durchsichtig. Wenn man zum Beispiel den Fensterhintergrund rosa macht und über SetLayeredWindowAttributes_() sagt, dass Rosa transparent dargestellt werden soll, schneidet Windows alle Bereiche im Fenster heraus, die Rosa sind. Eine schwarze Schrift würde dann praktisch "schweben".
@all:
Das Problem mit RedrawWindow habe ich auch gelöst. Ich erzeuge nun das Fenster hidden, manipuliere die ExStyle-Eigenschaften und blende es dann ein. Kann heute abend mal einen neueren Code senden. Übrigen kann man auch Gadgets im Fenster plazieren. So kann man sich das herumgemale mit der GDI sparen (GDI+ ist eh besser, habs aber noch nicht zum laufen gebracht)...
Gruß
Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Das was ihr jetzt macht, ist doch dasselbe wie FensterSkinning.
Das könnte Ihr aber einfacher haben, in dem Ihr zum Beispiel die SkinWinFast Lib verwendet, dann gehts auch unter Win98.
Das könnte Ihr aber einfacher haben, in dem Ihr zum Beispiel die SkinWinFast Lib verwendet, dann gehts auch unter Win98.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Schon, aber das Ganze mit nur 10 Zeilen Code, da Windows die ganze "Drecksarbeit" übernimmt. Außerdem geht es mir primär darum, dass das Fenster am Desktop klebt und durchklickbar ist und das man in ihm eventuell mit GDI+ etwas darin herummalen kann...
Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)
Hi,

Da ich gerade 2 Freistunden hatte
kommt hier ein kommentiertes Beispiel welches oben links die Zeit einblendet, funzt super:
Und wenn hier jetzt wer schreit ich soll WaitWindowEvent benutzen soll er sich bitte den Sinn des beispiels nochmal verinnerlichen
mfg
125
Ahh, THX habs gefundenSetLayeredWindowAttributes_() kennt zwei Transparenz-Modi.

Da ich gerade 2 Freistunden hatte

kommt hier ein kommentiertes Beispiel welches oben links die Zeit einblendet, funzt super:
Code: Alles auswählen
;Benötigt um das Fenster der höhe und der weite des Desktops anzupassen
ExamineDesktops()
;-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),"PaintonDesk",#PB_Window_Invisible)
;-Unser Fenster mit dem wir auf den Desktop malen wollen
OpenWindow(#ChildWindow,0,0,DesktopWidth(0),DesktopHeight(0),"PaintonDesk",#PB_Window_BorderLess|#PB_Window_Invisible,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,RGB(236,233,216))
;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

mfg
125


- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Verstehe ich nicht, Fenster die sich nicht schließen lassen und die CPU unnötig belasten finde ich nicht so toll125 hat geschrieben: Und wenn hier jetzt wer schreit ich soll WaitWindowEvent benutzen soll er sich bitte den Sinn des beispiels nochmal verinnerlichen

Vielleicht solltest Du ...
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Warum stehende Uhr?
SetTimer_ und die Uhr in der TimerProc stellen.
Keine CPU last und voll funktionierende Eventbearbeitung
SetTimer_ kann man in diesem Fall ruhig verwendent, da es sowieso XP-Only ist
SetTimer_ und die Uhr in der TimerProc stellen.
Keine CPU last und voll funktionierende Eventbearbeitung
SetTimer_ kann man in diesem Fall ruhig verwendent, da es sowieso XP-Only ist

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

@ts-soft:
Bei einem Fenster, das durchklickbar ist, gibt es eigentlich keine Events, oder?
@125:
Zur Not tut's ein großzügiges Delay von 250 Millisekunden auch. Das sollte für eine Uhr reichen. Und das Programm könnte man über den SysTray steuern oder einfach abschießen
Bei einem Fenster, das durchklickbar ist, gibt es eigentlich keine Events, oder?
@125:
Zur Not tut's ein großzügiges Delay von 250 Millisekunden auch. Das sollte für eine Uhr reichen. Und das Programm könnte man über den SysTray steuern oder einfach abschießen

Gruß, Daniel
| In der Realität ist die Wirklichkeit ganz anders...
PB 4.10 (Windows XP SP 2)

PB 4.10 (Windows XP SP 2)