Aktuelle Zeit: 15.07.2020 19:53

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: WinFX-Lib (inkl. "click-through" Window) - [Windows only]
BeitragVerfasst: 05.10.2010 16:33 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
Hallo zusammen,

inspiriert von diesem Thread, in dem Xaby nach einem nicht anklickbaren "Overlay-Fenster" fragte, hab ich mich mal drangesetzt und mal ausbaldowert ob und wie soetwas eventuell zu realisieren ist.
Und ... isch hab's doch tatsächlich hinbekommen.
Bild
Bei dem "nicht anklickbaren Fenster" handelt es sich also um ein Fenster im sogenannten "layered & transparency Mode", das zwar auf dem Desktop angezeigt wird, jedoch sämtliche Events zu dem dahinter liegenden Fenster durchlässt.
Sowas hätte ich zwar schon ein paar mal gut gebrauchen können, wusste bisher aber garnicht, dass sowas überhaupt geht :mrgreen: (hab hier auch noch nie eine Umsetzung davon gesehen).

Nunja ... habs wie gesagt hinbekommen und das ganze dann noch zusammen mit ein paar anderen Fenster-Spezialitäten (die ich ab und zu mal brauche) in eine Include gepackt und 'ne kleine Lib draus gemacht.
Bis auf den "click-through" Modus ist nicht wirklich neues dabei (nur bekannte Spielereien wie "Hide from TaskBar" und "Window-Transparency"), aber halt Dinge, die man ab und zu braucht und nach denen halt hier auch immer mal wieder (meist von PB-Neulingen) gefragt wird.

Ich hab mal 3 Files auf meinen WebSpace hochgeladen:
- die eigentliche Lib (als .pbi umgesetzt - Doku ist im Source)
- ein ausführbares Demo-Programm um sich mal schnell die Auswirkungen der Funktionen anschauen zu können.
- sowie den Source des Demo-Programms.
- alles zusammen gibt's (dank Thomas :D ) nun auch komplett als ZIP.
Bild
Im Demo-Programm (Bild oben) kann man z.B. sehr schön sehen, dass man das Browserfenster im Hintergrund DURCH das darüberliegende Fenster bedienen kann (nachdem man den "Click-Through"-Modus aktiviert hat).

Eine nähere Beschreibung des ganzen spare ich mir jetzt mal hier, da alles Nötige eigentlich im Source zu finden sein sollte.
Daher hier nur mal eine kleine Übersicht:

WinFX_ClickThrough(WinNr, State = #True) hat geschrieben:
turns the window into "click-through" Mode
In the "click-through" Mode all Mouse-Events (mouse-movement, clicks, hoover, ...) will go right through the Window to the window underneath.
That means, that the window will not receive any mouse-events from now on.
So keep that in mind, when you turn a window in "click-through" Mode and include a facility to close the window and/or react on userinput, rather than by Window-Events.
Note: For this effect, the window will be turned into "layered Mode".
For more details and limitations on that, see "additional Infos" in the "File description Header" above.
WinFX_HideFromTaskBar(WinNr, State = #True, AutoUnHide = #True) hat geschrieben:
Hides a window from the Taskbar, or brings it back on.
WinFX_Transparency(WinNr, Level, SkinningColor = #WinFX_NoSkinning) hat geschrieben:
Turns on the transparency effect for a window and sets its opacity to the given "Level".
If you set the "SkinningColor", this Color will be used to set an AlphaKey on that window, so it will be transparent on all Pixels which will have the given Color.
Note: For this effect, the window will be turned into "layered Mode".
For more details and limitations on that, see "additional Infos" in the "File description Header" above.
WinFX_TurnOffLayer(WinNr) hat geschrieben:
Turns off the "layered Mode" of the window and switches it back to "normal" mode.
This turns off any WinFX-Effect that will need the window to be in "layered Mode".
The following functions are affected by this: WinFX_ClickThrough() & WinFX_Transparency()
Note: For more informations about the "layered-Mode", see "additional Infos" in the "File description Header" above.

Wie man sieht - im Grunde also nicht wirklich viel Neues (bis auf den "Click-Through"-Effekt), aber vielleicht kann der eine oder andere von Euch das ja mal gebrauchen. ;)

Greetz and have fun, PL.

[Edit]: Link zum Zip-Archiv hinzugefügt.
[Edit2]: Neue Version online -> Window-Skinning Option bei WinFX_Transparency() hinzugefügt und Kommentare oben entsprechend angepasst.

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Zuletzt geändert von PureLust am 06.10.2010 18:17, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 05.10.2010 16:55 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
Klasse, funktioniert hier auffem XP32 perfekt. :allright:

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 05.10.2010 17:04 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Rings hat geschrieben:
funktioniert hier auffem XP32 perfekt.

dito hier auf Vista Business SP2

Auch von mit ein dickes :allright:

Danke & Grüße ... Kiffi

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 05.10.2010 19:59 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
Uhiiii ... Lob von zwei Koryphäen wie Euch ... danköööö !!!
Bild
Und auch Dank für's testen. :allright:

Grüße, PL.

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 05.10.2010 22:42 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
:allright: funktioniert gut, wenn ich im moment auch nicht wüßte wozu ich es nutzen könnte.

Aber, von mir wie immer erstmal Kritik :mrgreen:
Es wäre schöner, wenn Du die 3 Dateien in ein Zip packst um diverse Probleme zu vermeiden.
1. Nachfrage ob Exe ausgeführt werden darf fällt weg (je nach System und Software)
2. Das Anzeigen des Sources im Browser fällt weg (wenn man nicht sofort einen Rechtsclick nutzt)

Unter Tipps & Tricks wäre es eigentlich besser aufgehoben.

Gruß
Thomas

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 05.10.2010 23:18 
Offline
Benutzeravatar

Registriert: 26.06.2008 10:42
Gefällt auch mir recht gut, auch wenn ich eher weniger GUI's programmiere :allright:

Gruß, Alex

_________________
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 05.10.2010 23:42 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
@Thomas und Alex: Dank auch an Euch. :allright:

ts-soft hat geschrieben:
:allright: funktioniert gut, wenn ich im moment auch nicht wüßte wozu ich es nutzen könnte.
Also ich hätte genau dafür vor kurzem eine Verwendung gehabt:

Für meinen Onkel (der leider eine sehr starke Sehschwäche hat), habe ich eine Desktop-Lupe programmiert.
Nun wollte ich das so machen, dass die Lupe immer unter der Maus mitgeführt wird (die Maus also mitten in der Lupe).
Um nun durch die Lupe durchklicken zu können habe ich Regions benutzt (also unter der Maus ein Loch in die Lupe gestanzt).
Nun gab es zum einen eine kleinere Lupe, die immer mit der Maus mitgeführt wurde, als auch auch eine Vollbild-Lupe, wobei der gesamte Bildschirm als Lupe diente. Hierbei musste ich die Regions also bei jedem Mousemove wieder verändern (oder besser, freigeben und neu erstellen, da einfach "nur verändern" ja leider nicht geht).
1. geht das zum Teil ziemlich auf die Performance, und
2. geht das nicht immer schnell genug, so dass evtl. ein Klick erfolgte, bevor die Regions angepasst waren - der Klick ging also auf die Lupe statt hindurch.
Das wird nach der Änderung in ein "click-through" Window dann hoffentlich perfekt funktionieren. ;)

Weiterhin habe ich für uns hier in der Firma kürzlich eine App geschrieben, die ein Kamerabild (der Überwachungskamera unseres Haupteingangs) auf jeden Rechner projiziert, sobald jemand klingelt. Zuvor musste halt immer jemand aufstehen und nachsehen wer an der Türe ist.
Wenn nun das Kamerbild aufpoppte, konnte es (je nachdem wo der User gerade mit der Maus war) vorkommen, dass ihm das Kamerabild dazwischen gefunkt hat, den Klick abfing und das Kamerafenster den Fokus bekam.
Nach kurzer Zeit hatte ich das dann allerdings auch schon genau so umgeändert, wie Du's Xaby im oben angesprochenen Thread vorgeschlagen hattest - also der Maus mit dem Fenster einfach aus dem Weg zu gehen.
Aber ... wie Du Dir vielleicht denken kannst ... auch hierfür kann ich das also nun sehr gut gebrauchen. <)

Btw.: Um nun auch die Türe direkt über meine Anwendung öffnen zu können (was bei uns per Telefon über die Telefonanlage gemacht werden kann), hatte ich mich auch mal näher mit der TAPI beschäftigt (auh mann, ... was für ein Gewürge).
Hierbei ist dann also noch so nebenbei eine kleine TAPI-Lib entstanden, die ich auch mal hier reinstellen könnte, falls jemand Verwendung dafür hätte (ich meine mich erinnern zu können, dass kürzlich jemand Fragen bzgl. TAPI hatte).

Auch plane ich, bei einer meiner nächsten Anwendungen (Neuprogrammierung unseres firmeninternen Messangers) die Fenster der aufpoppenden Messages mit der "click-through"-Funktion auszustatten.

Wie Du siehst ... zumindest ich hab schon mal massig Verwendung dafür. ;)

ts-soft hat geschrieben:
Aber, von mir wie immer erstmal Kritik :mrgreen:
Es wäre schöner, wenn Du die 3 Dateien in ein Zip packst um diverse Probleme zu vermeiden.
1. Nachfrage ob Exe ausgeführt werden darf fällt weg (je nach System und Software)
2. Das Anzeigen des Sources im Browser fällt weg (wenn man nicht sofort einen Rechtsclick nutzt)
Konstruktive Kritik ist doch immer sehr willkommen !!! :allright:
Und wenn's auch noch so leicht umzusetzende ist erst recht. :mrgreen: (Zip ist auch schon druff)

ThanX nochmals .. und schöne Grüße, PL.

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Zuletzt geändert von PureLust am 06.10.2010 00:34, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 06.10.2010 00:06 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
man könnte auch ein stylisches Fenster oben am Monitorrand erscheinen
lassen, welches Infos über CPU-Auslastung, RAM-Belegung, etc. anzeigt.
Nach dem Motto: Wichtige Infos immer im Blick aber nie im Weg.

Grüße ... Kiffi

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 06.10.2010 00:14 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
Kiffi hat geschrieben:
man könnte auch ein stylisches Fenster oben am Monitorrand erscheinen
lassen, welches Infos über CPU-Auslastung, RAM-Belegung, etc. anzeigt.
Nach dem Motto: Wichtige Infos immer im Blick aber nie im Weg.
Auch 'ne geile Idee !!! Bild

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WinFX-Lib (inkl. "click-through" Window) - [Windows only
BeitragVerfasst: 06.10.2010 15:38 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
schon genial .. kann man aber noch ne winzigkeit erweitern ..
dahingehend, dass ein geskinntes Fenster transparent dargestellt werden kann

öömm SetLayeredWindowAttributes_(...) kann man
durchaus auch parameterverknotet (waW) bestücken, so das nicht nur Transparenz
sondern auch ein Skinning möglich wird (man erhält so geskinnte transparente Fenster)
(geskinnte sollten keine Titelleiste haben)


level=transparenzlevel
color=Alphafarbe (die wird dann eben nicht dargestellt)


aus ;SetLayeredWindowAttributes_(WindowID, #Null, 255*(100-level)/100, #LWA_ALPHA)
und ;SetLayeredWindowAttributes_(WindowID,color.l,0,1)
wird SetLayeredWindowAttributes_(WindowID,#Null|color.l,0|255*(100-level)/100,1|#LWA_ALPHA)

eine Art Beispiel
Code:
CreateImage(0,300,300)
StartDrawing(ImageOutput(0))
  Box(0,0,300,300,#Cyan)
  DrawingMode(#PB_2DDrawing_Gradient)
  BackColor(RGB(152, 226, 253))
  FrontColor(RGB(2, 59, 79))
  CircularGradient(70, 70, 200)
  Circle(150,150,140,#Red)
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawText(10,10,"ALT-F4 zum Beenden")
StopDrawing()
OpenWindow(0,0,0,300,300,"Fenster",#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible)
hBrush.l = CreatePatternBrush_(ImageID(0))
SetClassLong_(WindowID(0), #GCL_HBRBACKGROUND, hBrush.l)
InvalidateRect_(WindowID(0), #Null, #True)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,GetWindowLong_(WindowID(0),#GWL_EXSTYLE)|#WS_EX_LAYERED)
ll=255*(100-20)/100 ; 80 ist der TransparenzLevel in Prozent (Transparenz geht von 0 bis 255)
Debug ll
SetLayeredWindowAttributes_(WindowID(0),#Cyan|#Null,0|ll,1|#LWA_ALPHA)
StickyWindow(0,1)
HideWindow(0,0) ;sichtbar machen nach der skinnerei
Repeat
  event=WaitWindowEvent()
  Select event
  Case #WM_LBUTTONDOWN
    SendMessage_(WindowID(0),#WM_NCLBUTTONDOWN, #HTCAPTION,0) ;danilo, linke maus schiebt fenster
  EndSelect
Until event=#PB_Event_CloseWindow

_________________
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye