Donc, je me demandais s'il n'existait pas une technique permettant d'avoir la même chose mais en commençant à cliquer à l'extérieur du canvas.
Canvasgadget et mouse
Re: Canvasgadget et mouse
Je comprends bien, pourtant, ça fonctionne si on clique en premier sur le canvas et qu'on sort du canvas, il garde l'event même si on n'est plus sur le canvas
.
Donc, je me demandais s'il n'existait pas une technique permettant d'avoir la même chose mais en commençant à cliquer à l'extérieur du canvas.
Donc, je me demandais s'il n'existait pas une technique permettant d'avoir la même chose mais en commençant à cliquer à l'extérieur du canvas.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Re: Canvasgadget et mouse
chez moi c'est l'inverse !
je commence a cliquer en dehors , puis lorsque le pointeur entre dans le canvas le dessin se fait
lorsque je sort du canvas, le dessin s'arrete ! (ce qui me semble normal puisque le canvas perd la main a ce moment là )
(Pb 5.20 x86)
je commence a cliquer en dehors , puis lorsque le pointeur entre dans le canvas le dessin se fait
lorsque je sort du canvas, le dessin s'arrete ! (ce qui me semble normal puisque le canvas perd la main a ce moment là )
(Pb 5.20 x86)
- falsam
- Messages : 7334
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Canvasgadget et mouse
Je ne sais pas si la technique est académique mais pourrais tu essayer ce code.En prime la sélection d'une couleur alpha et sauvegarde automatique de l'image finale sur le bureau. Une base pour en faire autre chose 
Code : Tout sélectionner
Enumeration
#Mainform
#Clear
#Color
#Alpha
#ScrollArea
#ScrollArea_Canvas
#Canvas
#Image
#ImageCanvasSave
#ImageCanvasCurrent
EndEnumeration
Define.l Event, GEvent, TEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global Paint.b, Color.i, Alpha.i
Procedure Clear()
CreateImage(#ImageCanvasSave, 500, 300, 32, #PB_Image_Transparent)
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 500, 300, RGBA(255, 255, 255,255))
StopDrawing()
EndIf
EndProcedure
Procedure SelectColor()
Protected Value.i
Value = ColorRequester(Color)
If Value > -1
Color = RGBA(Red(Value), Green(Value), Blue(Value), Alpha)
EndIf
EndProcedure
Procedure DrawBox(X1.i, Y1.i)
If Paint = #True
X2 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseX) - GadgetX(#Canvas)
Y2 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseY) - GadgetY(#Canvas)
CreateImage(#Image, 500, 300, 32, #PB_Image_Transparent)
CreateImage(#ImageCanvasCurrent, 500, 300, 32, #PB_Image_Transparent)
If StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_AllChannels)
Box(X1, Y1, X2-X1, Y2-Y1, Color)
StopDrawing()
EndIf
If StartDrawing(ImageOutput(#ImageCanvasCurrent))
DrawAlphaImage(ImageID(#ImageCanvasSave), 0, 0)
DrawAlphaImage(ImageID(#Image), 0, 0)
StopDrawing()
EndIf
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 500, 300, RGBA(255, 255, 255,255))
DrawAlphaImage(ImageID(#ImageCanvasSave), 0, 0)
DrawAlphaImage(ImageID(#Image), 0, 0)
StopDrawing()
EndIf
EndIf
EndProcedure
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 800, 600, "New Form", WindowStyle)
ButtonGadget(#Clear, 5, 10, 40, 24, "Clear")
ButtonGadget(#Color, 50, 10, 40, 24, "Color")
TextGadget(#PB_Any, 100, 12, 40, 20, "Alpha")
SpinGadget(#Alpha, 130, 10, 50, 22, 0, 255, #PB_Spin_Numeric)
ScrollAreaGadget(#ScrollArea, 50, 50, 700, 500, 1600, 1200)
CanvasGadget(#ScrollArea_Canvas, 0, 0, 1600, 1200)
StartDrawing(CanvasOutput(#ScrollArea_Canvas))
Box(0, 0, 1600, 1200, RGB(210, 180, 140))
StopDrawing()
CanvasGadget(#Canvas, 100, 100, 500, 300)
StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 500, 300, RGBA(255, 255, 255,255))
StopDrawing()
CloseGadgetList()
EndProcedure
Procedure Start()
UsePNGImageEncoder()
CreateImage(#Image, 500, 300, 32, #PB_Image_Transparent)
CreateImage(#ImageCanvasSave, 500, 300, 32, #PB_Image_Transparent)
CreateImage(#ImageCanvasCurrent, 500, 300, 32, #PB_Image_Transparent)
Open_MainForm()
Color = RGBA(128, 128, 128, 180)
Alpha = 180
SetGadgetState (#Alpha, 180)
EndProcedure
start()
Repeat
Event = WaitWindowEvent(10)
GEvent = EventGadget()
TEvent = EventType()
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #Clear
Clear()
Case #Color
SelectColor()
Case #Alpha
Alpha = GetGadgetState(#Alpha)
Color = RGBA(Red(Color), Green(Color), Blue(Color), Alpha)
Case #ScrollArea_Canvas
Select TEvent
Case #PB_EventType_LeftButtonDown
If Paint = #False
X1 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseX) - GadgetX(#Canvas)
Y1 = GetGadgetAttribute(#ScrollArea_Canvas, #PB_Canvas_MouseY) - GadgetY(#Canvas)
Paint = #True
EndIf
Case #PB_EventType_LeftButtonUp
Paint = #False
CopyImage(#ImageCanvasCurrent, #ImageCanvasSave)
;Sauvegarde de l'image sur le bureau
SaveImage(#ImageCanvasSave, GetHomeDirectory()+"desktop\dummysave.png", #PB_ImagePlugin_PNG)
Case #PB_EventType_MouseMove
DrawBox(X1, Y1)
EndSelect
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEverConfiguration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Canvasgadget et mouse
ça marche bien chez moi 
- falsam
- Messages : 7334
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Canvasgadget et mouse
Merci d'avoir essayer Dobro 
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Canvasgadget et mouse
Merci falsam pour cet exemple.
J'avais effectivement réfléchi à une technique utilisant un canvas sur un canvas et ton exemple fonctionne parfaitement.
Je vais regarder si je peux modifier mon code en conséquence pour y introduire cette technique
.
J'avais effectivement réfléchi à une technique utilisant un canvas sur un canvas et ton exemple fonctionne parfaitement.
Je vais regarder si je peux modifier mon code en conséquence pour y introduire cette technique
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english