- si on clique dans la surface du canvas et qu'on reste cliqué, il reste actif, même si on sort du canvas.
- si on ne clique pas dessus, qu'on y arrive ensuite (mouseEnter ou mousemove) il ne reste pas actif si on en sort.
Savez-vous s'il existe une technique pour reste actif comme lors d'un clic sur le canvas mais en partant d'un mousemove ?
Code : Tout sélectionner
Enumeration
#IMAGE_Content ; stores the previous CanvasGadget content while the mouse is down
#IMAGE_Color
EndEnumeration
Enumeration
#GADGET_CanvasFond
#GADGET_Canvas
#GADGET_Box
#GADGET_Clear
#GADGET_Area
EndEnumeration
#win = 0
#statusbar = 0
Global CurrentColor, StartX, StartY
Procedure DrawAction(x, y, EventType)
If StartDrawing(CanvasOutput(#GADGET_Canvas))
DrawImage(ImageID(#IMAGE_Content), 0, 0)
Box(StartX, StartY, x-StartX, y-StartY, CurrentColor)
StopDrawing()
EndIf
EndProcedure
CurrentColor = RGB(120,120,120)
CreateImage(#IMAGE_Color, 35, 35, 24)
CreateImage(#IMAGE_Content, 380, 380, 24)
If OpenWindow(#win, 0, 0, 800, 600, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If ScrollAreaGadget(#GADGET_Area, 70, 70, WindowWidth(#win) - 90, WindowHeight(#win) - 90, WindowWidth(#win), WindowHeight(#win))
CanvasGadget(#GADGET_Canvas, 110, 110, 380, 380, #PB_Canvas_Keyboard)
CloseGadgetList()
EndIf
ButtonGadget(#GADGET_Box, 10, 10, 50, 25, "Box", #PB_Button_Toggle)
ButtonGadget(#GADGET_Clear, 10, 40, 50, 25, "Clear")
SetGadgetState(#GADGET_Box, 1)
SetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Cursor, #PB_Cursor_Cross)
SetActiveGadget(#GADGET_Canvas)
CreateStatusBar(#statusbar,WindowID(#win))
AddStatusBarField(200)
AddStatusBarField(200)
AddStatusBarField(200)
Repeat
Event = WaitWindowEvent()
EventGadget = EventGadget()
If Event = #PB_Event_Gadget
Select EventGadget()
Case #GADGET_Canvas
X = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseX)
Y = GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_MouseY)
If Start = 0
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
Start =1
StartX = X
StartY = Y
EndIf
EndIf
If paint
DrawAction(X, Y, EventType())
EndIf
StatusBarText(#statusbar, 1, "X : "+Str(x)+" / Y :"+Str(y))
Type = EventType()
Select EventType()
Case #PB_EventType_LeftButtonDown
paint = 1
If StartDrawing(ImageOutput(#IMAGE_Content))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
StartX = X
StartY = Y
DrawAction(X, Y, EventType())
Case #PB_EventType_LeftButtonUp
DrawAction(X, Y, EventType())
paint = 0
Start = 0
Case #PB_EventType_MouseMove
If GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Buttons) & #PB_Canvas_LeftButton
If paint = 0
paint = 1
If StartDrawing(ImageOutput(#IMAGE_Content))
DrawImage(GetGadgetAttribute(#GADGET_Canvas, #PB_Canvas_Image), 0, 0)
StopDrawing()
EndIf
EndIf
DrawAction(X, Y, EventType())
EndIf
EndSelect
Case #GADGET_Clear
If StartDrawing(CanvasOutput(#GADGET_Canvas))
Box(0, 0, 380, 380, $FFFFFF)
StopDrawing()
EndIf
SetActiveGadget(#GADGET_Canvas)
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Si vous avez une idée pour résoudre ça ^^.