;Autor: Danilo EnableExplicit Define WindowProc_MouseSelect Define WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX Define WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY Define WindowProc_MouseSelectRect.RECT Procedure OnMouseSelection(x,y,width,height) SetGadgetText(1,"X: "+Str(x)+#TAB$+" Y: "+Str(y)+#TAB$+" Breite: "+Str(width)+#TAB$+" Höhe: "+Str(height)) EndProcedure Procedure DrawMouseSelector(hWnd) Protected hDC Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY Shared WindowProc_MouseSelectRect.RECT If WindowProc_MouseSelectStartX > WindowProc_MouseSelectLastX WindowProc_MouseSelectRect\left = WindowProc_MouseSelectLastX WindowProc_MouseSelectRect\right = WindowProc_MouseSelectStartX Else WindowProc_MouseSelectRect\left = WindowProc_MouseSelectStartX WindowProc_MouseSelectRect\right = WindowProc_MouseSelectLastX EndIf If WindowProc_MouseSelectStartY > WindowProc_MouseSelectLastY WindowProc_MouseSelectRect\top = WindowProc_MouseSelectLastY WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectStartY Else WindowProc_MouseSelectRect\top = WindowProc_MouseSelectStartY WindowProc_MouseSelectRect\bottom = WindowProc_MouseSelectLastY EndIf hDC = GetDC_(hWnd) DrawFocusRect_(hDC,@WindowProc_MouseSelectRect) ReleaseDC_(hWnd,hDC) EndProcedure Procedure WindowProc(hWnd,Msg,wParam,lParam) Protected winrect.RECT Shared WindowProc_MouseSelect Shared WindowProc_MouseSelectStartX, WindowProc_MouseSelectLastX Shared WindowProc_MouseSelectStartY, WindowProc_MouseSelectLastY Shared WindowProc_MouseSelectRect.RECT Select Msg Case #WM_LBUTTONDOWN WindowProc_MouseSelect = 1 WindowProc_MouseSelectStartX = lParam&$FFFF WindowProc_MouseSelectStartY = (lParam>>16)&$FFFF GetClientRect_(hWnd,winrect.RECT) MapWindowPoints_(hWnd,0,winrect,2) ClipCursor_(winrect) Case #WM_LBUTTONUP If WindowProc_MouseSelect > 1 DrawMouseSelector(hWnd) If WindowProc_MouseSelectRect\left <> WindowProc_MouseSelectRect\right And WindowProc_MouseSelectRect\top <> WindowProc_MouseSelectRect\bottom OnMouseSelection(WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\top,WindowProc_MouseSelectRect\right-WindowProc_MouseSelectRect\left,WindowProc_MouseSelectRect\bottom-WindowProc_MouseSelectRect\top) SetCapture_(0) EndIf EndIf ClipCursor_(0) WindowProc_MouseSelect = 0 Case #WM_MOUSEMOVE If WindowProc_MouseSelect > 0 And wParam & #MK_LBUTTON If WindowProc_MouseSelect > 1 DrawMouseSelector(hWnd) Else WindowProc_MouseSelect + 1 EndIf WindowProc_MouseSelectLastX = lParam&$FFFF WindowProc_MouseSelectLastY = (lParam>>16)&$FFFF DrawMouseSelector(hWnd) SetCapture_(hWnd) EndIf EndSelect ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) TextGadget(1,10,10,480,20,"X: 0"+#TAB$+" Y: 0"+#TAB$+" Breite: 0"+#TAB$+" Höhe: 0",0) SetWindowCallback(@WindowProc()) Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf