Page 1 sur 1
Dessiner dans un Gadget
Publié : ven. 14/déc./2007 10:19
par Thyphoon
Voilà je tente de faire en sorte qu'on puisse dessiner directement dans un gadget le problème c'est que ça ne garde pas l'info si on reste appuyer sur le bouton de la souris. Quelqu'un a une idée ?
Code : Tout sélectionner
CreateImage(0,100,100)
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
CreateGadgetList(WindowID(0))
ImageGadget(1, 20, 20, 100, 100, ImageID(0), #PB_Image_Border)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
If EventGadget()=1;EventType()=#PB_EventType_LeftClick
StartDrawing(ImageOutput(0))
Circle(WindowMouseX(0)-GadgetX(1),WindowMouseY(0)-GadgetY(1),5,#Red)
StopDrawing()
SetGadgetState(1,ImageID(0))
EndIf
ElseIf EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Publié : ven. 14/déc./2007 11:36
par Backup
Code : Tout sélectionner
CreateImage(0,100,100)
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
CreateGadgetList(WindowID(0))
ImageGadget(1, 20, 20, 100, 100, ImageID(0), #PB_Image_Border)
Repeat
EventID = WindowEvent()
Delay(10)
If EventID = #PB_Event_Gadget
If EventGadget()=1;EventType()=#PB_EventType_LeftClick
mouse_event_(#MOUSEEVENTF_LEFTDOWN,WindowMouseX(0)-GadgetX(1),WindowMouseY(0)-GadgetY(1),0,1) ; appuis
StartDrawing(ImageOutput(0))
Circle(WindowMouseX(0)-GadgetX(1),WindowMouseY(0)-GadgetY(1),5,#Red)
StopDrawing()
SetGadgetState(1,ImageID(0))
EndIf
ElseIf EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Publié : ven. 14/déc./2007 12:10
par Thyphoon
Merci beaucoup Dobro !
Au moment ou j'ai reçu un email m'informant d'une reponse j'ai trouvé une solution.Mais la tienne me parait plus simple, côté compatibilité la mienne doit aussi marché sur Linux. Voici mon code (pour la gloire)
Mais je vais sans doute utiliser le code de Dobro
Code : Tout sélectionner
Procedure WindowMouseButton(Wnd, ButtonNr)
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
;Linux Version
Protected gdkWnd.l, x.l, y.l, mask.l
If Wnd
*Window.GTKWindow = Wnd
gdkWnd = *Window\bin\child\window
gdk_window_get_pointer_(gdkWnd, @x, @y, @mask)
Select ButtonNr
Case 0
If (mask & #GDK_BUTTON1_MASK)
ProcedureReturn 1
EndIf
Case 1
If (mask & #GDK_BUTTON3_MASK)
ProcedureReturn 1
EndIf
Case 2
If (mask & #GDK_BUTTON2_MASK)
ProcedureReturn 1
EndIf
EndSelect
EndIf
CompilerElse
;Windows Version
If Wnd And GetForegroundWindow_() = Wnd
Select ButtonNr
Case 0
If GetAsyncKeyState_(#VK_LBUTTON) > 0
ProcedureReturn 1
EndIf
Case 1
If GetAsyncKeyState_(#VK_RBUTTON) > 0
ProcedureReturn 1
EndIf
Case 2
If GetAsyncKeyState_(#VK_MBUTTON) > 0
ProcedureReturn 1
EndIf
EndSelect
EndIf
CompilerEndIf
ProcedureReturn 0
EndProcedure
CreateImage(0,100,100)
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
CreateGadgetList(WindowID(0))
ImageGadget(1, 20, 20, 100, 100, ImageID(0), #PB_Image_Border)
Repeat
EventID = WaitWindowEvent()
If EventGadget()=1 And WindowMouseButton(WindowID(0), 0);EventType()=#PB_EventType_LeftClick
StartDrawing(ImageOutput(0))
Circle(WindowMouseX(0)-GadgetX(1),WindowMouseY(0)-GadgetY(1),5,#Red)
StopDrawing()
SetGadgetState(1,ImageID(0))
EndIf
If EventID = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Publié : ven. 14/déc./2007 18:29
par beauregard
[quote="Thyphoon"][/quote]T'as version est également tout à fait opérationnelle, on peut même dessiner un schtroumpf( enfin, juste la tête hein) !
