Seite 1 von 1
SkinnedWindow verschiebbar machen
Verfasst: 10.02.2005 00:33
von bluejoke
Hallo!
Kann man ein Skinned Window irgendwie komfortabel verschiebbar machen?
Am besten mit einem einzigen Befehl und keiner Eventabfrage...
Danke
Simon
Verfasst: 10.02.2005 00:52
von nicolaus
hier siehst du an einem kleinen beispiel wie du das machen kannst
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 = 1
hoffe das hilft
Verfasst: 10.02.2005 15:05
von bluejoke
Das 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...
Verfasst: 10.02.2005 15:28
von nicolaus
dann setz doch einfach direkt nach OpenWindow() ein HideWindow(deineWindowID,1)
und eine zeile über repeat einfach wieder HideWindow(deineWindowID,0)
das dürfte helfen und dein fenster wird erst gezeigt wenn es aufgebaut is
Verfasst: 10.02.2005 15:58
von bluejoke
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...
Verfasst: 10.02.2005 16:06
von nicolaus
ok dann versuch es mal so
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 = 1
hoffe das das jetzt dein prob beseitigt
Verfasst: 10.02.2005 16:23
von bluejoke
Das 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?