Verfasst: 09.03.2005 14:09
OK, freedimension - nun habe ich Deinen Fehler wohl auch
gesehen und mich ziemlich gewundert.
Habe jetzt einige Wege probiert und haufenweise Code geschrieben...
dabei scheint die korrekte(?) Lösung doch viel einfacher zu sein:
Dachte schon ich bin zu blöd dazu, nachdem es mit tausenden
Abfragen mehr noch immer nicht richtig ging.
Also nochmal von vorne angefangen... und siehe da, scheint
so zu funktionieren wie man es kennt und erwartet.
gesehen und mich ziemlich gewundert.
Habe jetzt einige Wege probiert und haufenweise Code geschrieben...
dabei scheint die korrekte(?) Lösung doch viel einfacher zu sein:
Code: Alles auswählen
;
; Workarea Border Magnet (2)
;
; by Danilo, 9th March 2005
;
#MAGNET = 25
Procedure WndProc(hWnd,Msg,wParam,lParam)
Static MouseOffsetX,MouseOffsetY
If hWnd = WindowID(0)
Select Msg
Case #WM_NCLBUTTONDOWN
GetWindowRect_(hWnd,rect.RECT)
MouseOffsetX = (lParam & $FFFF) - rect\left
MouseOffsetY = ((lParam >> 16)&$FFFF) - rect\top
Case #WM_MOVING
*rect.RECT = lParam
If *rect
width = *rect\right - *rect\left
height = *rect\bottom - *rect\top
SystemParametersInfo_(#SPI_GETWORKAREA,0,rect.RECT,0)
GetCursorPos_(m.POINT)
*rect\left = m\x - MouseOffsetX
*rect\top = m\y - MouseOffsetY
*rect\right = *rect\left + width
*rect\bottom= *rect\top + height
If *rect\left < #MAGNET ; left
*rect\left = 0 : modified = 1
EndIf
If *rect\top < #MAGNET ; top
*rect\top = 0 : modified = 1
EndIf
If *rect\right > rect\right - #MAGNET ; right
*rect\left = rect\right - width : modified = 1
EndIf
If *rect\bottom > rect\bottom - #MAGNET ; bottom
*rect\top = rect\bottom - height : modified = 1
EndIf
If modified
*rect\right = *rect\left + width
*rect\bottom = *rect\top + height
EndIf
ProcedureReturn #TRUE
EndIf
EndSelect
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Move me!")
SetWindowCallback(@WndProc())
Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindowAbfragen mehr noch immer nicht richtig ging.
Also nochmal von vorne angefangen... und siehe da, scheint
so zu funktionieren wie man es kennt und erwartet.