[Resolu]DrawFocusRect_() dans un ScrollArea
Publié : lun. 03/mars/2008 13:41
Bonjour je voudrais pouvoir faire apparaitre un rectangle de sélection dans un ScrollArea, comme on peut le faire sur le background d'une fenêtre.
J'ai récupérer un code sur un forum qui permet de dessiner ce rectangle, mais je n'arrive pas à sélectionner depuis mon ScrollArea. En regardant ce qui passe dans le CallBack,, je ne vois que des evénements non récupérables...
Si quelqu'un a une solution, je suis fort preneur !!!
Voilà le code en question :
Merci d'avance.
Lionel
J'ai récupérer un code sur un forum qui permet de dessiner ce rectangle, mais je n'arrive pas à sélectionner depuis mon ScrollArea. En regardant ce qui passe dans le CallBack,, je ne vois que des evénements non récupérables...

Si quelqu'un a une solution, je suis fort preneur !!!
Voilà le code en question :
Code : Tout sélectionner
; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=2914&highlight=
; Author: Danilo (updated for PB4.00 by blbltheworm)
; Date: 24. November 2003
; OS: Windows
; Demo: No
;
; by Danilo, 24.11.2003 - german forum
;
Procedure OnMouseSelection(x,y,width,height)
Debug "-----"
Debug "Selected:"
Debug "X : "+Str(x)
Debug "Y : "+Str(y)
Debug "Width : "+Str(width)
Debug "Height: "+Str(height)
EndProcedure
Procedure DrawMouseSelector(hwnd)
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)
;UpdateWindow_(hWnd) ; Win9x fix?
EndProcedure
Procedure WindowProc(hwnd,msg,wParam,lParam)
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
OpenWindow(0,0,0,400,400,"Mega Mouse Selector",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
HideWindow(0,0)
CreateGadgetList(WindowID(0))
StringGadget(0, 10,10, 50, 20, "coucou")
ButtonGadget(1, 100,100, 100,20, "ca va ?")
ScrollAreaGadget(2, 205, 205, 180, 180, 800, 400, 30)
SetWindowCallback(@WindowProc())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Lionel