Hallo!
Kann man ein Skinned Window irgendwie komfortabel verschiebbar machen?
Am besten mit einem einzigen Befehl und keiner Eventabfrage...
Danke
Simon
SkinnedWindow verschiebbar machen
SkinnedWindow verschiebbar machen
Windows XP Pro SP2 - PB 4.00Ich bin Ausländer - fast überall
hier siehst du an einem kleinen beispiel wie du das machen kannst
hoffe das hilft
Code: Alles auswählen
wnd = OpenWindow(0,0,0,200,200,#WS_POPUP,"")
CreateGadgetList(WindowID())
ButtonGadget(0,10,10,100,20,"Close")
Repeat
GetCursorPos_(MousePos.POINT)
If WindowFromPoint_(MousePos\x,MousePos\y)=wnd
ReleaseCapture_()
SendMessage_(wnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
gadget = EventGadgetID()
If gadget = 0
Quit = 1
EndIf
EndIf
Until Quit = 1Das ist genau das, was ich gesucht habe! Danke!
Ich hab aber noch ein Problem, das nur dann auftritt, wenn man die kompilierte Exe aufruft:
Wenn man beim laden des Programms bereits mit der Maus über den Bereich des Fensters fährt, ohne die Maus zu drücken, dann wird das Fenster auch verschoben, was sehr eigenartig wirkt, wenn plötzlich das Fenster ganz rechts unten in der Ecke ist...
Ich hab aber noch ein Problem, das nur dann auftritt, wenn man die kompilierte Exe aufruft:
Wenn man beim laden des Programms bereits mit der Maus über den Bereich des Fensters fährt, ohne die Maus zu drücken, dann wird das Fenster auch verschoben, was sehr eigenartig wirkt, wenn plötzlich das Fenster ganz rechts unten in der Ecke ist...
Windows XP Pro SP2 - PB 4.00Ich bin Ausländer - fast überall
hab ich ja schon... ich probiers mal so, dass das HideWindow erst dann aufgehoben wird, wenn die Schleife einmal durchgelaufen ist...
EDIT: Also der Fehler tritt immer noch auf, aber nicht mehr so häufig...
Wie kann man denn Abfragen (in einer normalen Windows-Apllikation) ob die Maustaste gedrückt ist? Oder falls das nicht geht, ob die Maustaste gedrückt wurde und wann sie wieder losgelassen wurde...
EDIT: Also der Fehler tritt immer noch auf, aber nicht mehr so häufig...
Wie kann man denn Abfragen (in einer normalen Windows-Apllikation) ob die Maustaste gedrückt ist? Oder falls das nicht geht, ob die Maustaste gedrückt wurde und wann sie wieder losgelassen wurde...
Windows XP Pro SP2 - PB 4.00Ich bin Ausländer - fast überall
ok dann versuch es mal so
hoffe das das jetzt dein prob beseitigt
Code: Alles auswählen
left=#VK_LBUTTON+GetSystemMetrics_(#SM_SWAPBUTTON)
wnd = OpenWindow(0,0,0,200,200,#WS_POPUP,"")
CreateGadgetList(WindowID())
ButtonGadget(0,10,10,100,20,"Close")
Repeat
GetCursorPos_(MousePos.POINT)
If WindowFromPoint_(MousePos\x,MousePos\y)=wnd And GetAsyncKeyState_(left)
ReleaseCapture_()
SendMessage_(wnd,#WM_NCLBUTTONDOWN, #HTCAPTION,0)
EndIf
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
gadget = EventGadgetID()
If gadget = 0
Quit = 1
EndIf
EndIf
Until Quit = 1Das ist echt komisch...
Also das ganze tritt nur auf, wenn man sich bereits über der Position befindet, an der das Fenster erscheint. Das Fenster wird zuerst so verschoben, dass die linke obere Ecke unter dem - jetzt beschäftigt- cursor ist. Das Fenster wird dann mitgenommen...
Ich mach mal einen Screenshot wie das dann aussieht.
So:

Im Editor tritt das Problem übrigens nicht auf, da funzt alles einwandfrei.
EDIT: Also im Editor tritt das Problem doch auf, das hab ich bloß nicht gemerkt, weil ich da alles über die F-Tasten mach...
Der Code nimmt also auch den Tastendruck auf, der nicht für ihn, sondern fürs Icon gedacht ist... Ich denke man kann das umgehen, wenn man diese "Verschiebfunktion" die ersten 2 Sekunden deaktiviert. Das mach ich dann einfach mit ElapsedMilliseconds() - oder gibts einen besseren Weg?
Also das ganze tritt nur auf, wenn man sich bereits über der Position befindet, an der das Fenster erscheint. Das Fenster wird zuerst so verschoben, dass die linke obere Ecke unter dem - jetzt beschäftigt- cursor ist. Das Fenster wird dann mitgenommen...
Ich mach mal einen Screenshot wie das dann aussieht.
So:

Im Editor tritt das Problem übrigens nicht auf, da funzt alles einwandfrei.
EDIT: Also im Editor tritt das Problem doch auf, das hab ich bloß nicht gemerkt, weil ich da alles über die F-Tasten mach...
Der Code nimmt also auch den Tastendruck auf, der nicht für ihn, sondern fürs Icon gedacht ist... Ich denke man kann das umgehen, wenn man diese "Verschiebfunktion" die ersten 2 Sekunden deaktiviert. Das mach ich dann einfach mit ElapsedMilliseconds() - oder gibts einen besseren Weg?
Windows XP Pro SP2 - PB 4.00Ich bin Ausländer - fast überall