Seite 1 von 1
Fenster bewegen II mit nur einen Klick
Verfasst: 18.04.2005 23:37
von rayman1970
Code: Alles auswählen
; ************** Fenster bewegen II / Code 2005 by RayMan1970 **************
OpenWindow(0,0,0,222,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Fenster bewegen II") And CreateGadgetList(WindowID(0))
Repeat
Event = WaitWindowEvent()
;{ ----------- Linke Maustaste gedrückt Fenster bewegen -------------
maus_auf_fenster = 0
If GetAsyncKeyState_(#VK_LBUTTON) > 0
If WindowMouseX() > -1
If WindowMouseY() > -1
maus_auf_fenster = 1
EndIf
EndIf
EndIf ;} ------------------------------------------------------------
;{ ----------- Neue Fenster Position setzen -------------
If maus_auf_fenster = 1
X = WindowMouseX()-PositionX
Y = WindowMouseY()-PositionY
MoveWindow(WindowX()+X,WindowY()+Y)
EndIf ;} ------------------------------------------------
;{ ----------- Neue Fenster Position ermitteln ---------
If maus_auf_fenster = 0
CLICDROIT = 1 - CLICDROIT
If CLICDROIT
PositionX = WindowMouseX()
PositionY = WindowMouseY()
EndIf
EndIf ;} -----------------------------------------------
Until Event = #PB_EventCloseWindow
End
Verfasst: 19.04.2005 04:42
von Donald
Hi rayman1970,
nette Idee, aber selbst beim Klick auf ein Gadget bewegt sich Fenster.
Warum machste das nicht mit CallBack und dann nur Move wenn unter
der Maus frei ist, also kein Gadget oder sonst etwas mit Funktion
Verfasst: 19.04.2005 09:53
von dige
So gehts auch einfacher und man verliert das Fenster nicht bei schnellen
Mausbewegungen:
Code: Alles auswählen
; MoveWindow, DiGe 04/2004
OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Ins Fenster klicken")
Repeat
Event = WaitWindowEvent()
maus_auf_fenster = 0
If GetAsyncKeyState_(#VK_LBUTTON) > 0
SetCursor_( LoadCursor_( #Null, #IDC_SIZEALL ))
SendMessage_( WindowID(), $112, $F012, 0)
ReleaseCapture_()
EndIf
Until Event = #PB_EventCloseWindow
Verfasst: 19.04.2005 16:41
von Ynnus
Eine Message-Konstante als Hex-Wert zu senden, viel umständlicher gehts wohl kaum, oder? Wofür werden denn die Codes hier gepostet? Dann kann man die Konstanten auch verwenden. Wer jetzt wissen will welche Message da gesendet wird, darf sogesehen alle Messages debuggen und die Werte vergleichen... Keinesfalls Vorbildliche Methode.

Verfasst: 19.04.2005 17:12
von NicTheQuick
Viel sauberer geht das sowieso nur mit einem Callback.
Code: Alles auswählen
Global Win_Main_Close.l, Win_Main.l
Win_Main_Close = #False
Procedure WindowCallback(hWindow.l, Message.l, wParam.l, lParam.l)
Protected Result.l
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_LBUTTONDOWN ;Wenn die linke Maustaste gedrückt ist
ReleaseCapture_()
SendMessage_(hWindow, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
Case #WM_KEYDOWN ;Wenn eine Taste gedrückt ist
Select wParam
Case #VK_ESCAPE ;ESC gedrückt
Win_Main_Close = #True
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
Win_Main = OpenWindow(#PB_Any, 0, 0, 200, 100, #PB_Window_ScreenCentered | #PB_Window_BorderLess, "PB Borderless")
If Win_Main
SetWindowCallback(@WindowCallback())
Repeat
WaitWindowEvent()
Until Win_Main_Close
CloseWindow(Win_Main)
EndIf
Verfasst: 26.03.2006 09:32
von real
Das funktioniert nicht, wenn ich ein ImageGadget auf die volle Größe des Fensters skaliere.
Code: Alles auswählen
Global Win_Main_Close.l, Win_Main.l
Win_Main_Close = #False
Procedure WindowCallback(hWindow.l, Message.l, wParam.l, lParam.l)
Protected Result.l
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_LBUTTONDOWN ;Wenn die linke Maustaste gedrückt ist
ReleaseCapture_()
SendMessage_(hWindow, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
Case #WM_KEYDOWN ;Wenn eine Taste gedrückt ist
Select wParam
Case #VK_ESCAPE ;ESC gedrückt
Win_Main_Close = #True
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
Win_Main = OpenWindow(#PB_Any, 0, 0, 50, 50, "PB Borderless", #PB_Window_ScreenCentered | #PB_Window_BorderLess)
If Win_Main
CreateGadgetList (WindowID(Win_Main))
ImageGadget (0,0,0,50,50,CatchImage(0,?Window))
SetWindowCallback(@WindowCallback())
Repeat
WaitWindowEvent()
Until Win_Main_Close
CloseWindow(Win_Main)
EndIf
DataSection
Window: IncludeBinary "logo.bmp"
EndDataSection
Das Bitmap zum Test könnt bekommt ihr
hier.
Verfasst: 26.03.2006 14:07
von Donald
Hi real,
Code: Alles auswählen
ImageGadget (0,0,0,50,50,CatchImage(0,?Window))
DisableGadget(0,1)
wenn Du DisableGadget einfügst geht es.
Verfasst: 26.03.2006 18:04
von real
Cool... Danke
