Seite 3 von 3

Verfasst: 09.03.2005 14:09
von Danilo
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:

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_CloseWindow
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.

Verfasst: 09.03.2005 14:30
von benny
Danilo's Code läuft bei mir ohne Probleme.

Nette Idee mit dem Magnetrand - thx 4 sharing :!:

Verfasst: 09.03.2005 17:59
von Lukaso
@Danilo
Danke, konnte mir meine benötigten Teile rauspicken ... :allright:

MFG Lukaso