il peut s'avérer utile d'avoir une option zoom pour nos gadgets personnels. Voici une façon de le faire.
Remarque: déplacez la molette de la souris pour agrandir ou rétrécir
Code : Tout sélectionner
; AUTHOR : MicrodevWeb
; DATE : 2017-09-11
; NAME : make zoom function for your personal canvas-gadgets
;***************************************************************
Global Zoom_factor.f=1 ; facteur de zomm
Structure sButton
ID.l
x.l
y.l
w.l
h.l
name.s
color.l
EndStructure
Global Dim myButtons.sButton(6)
#Main_form=0
#Main_canvas=0
Procedure Create_buttons()
Protected i,x=50
; je crée ici quelques boutons
For i=0 To 5
With myButtons(i)
\name="Button "+Str(i)
\w=50
\h=50
\x=x
\y=50
\color=RGBA(Random(255,0), Random(255,0), Random(255,0), 255)
EndWith
x+60
Next
EndProcedure
Procedure Draw()
Protected i=0
; je dessine ici les boutons
StartVectorDrawing(CanvasVectorOutput(#Main_canvas,#PB_Unit_Pixel))
; ceci va gèrer le zomm
ScaleCoordinates(Zoom_factor,Zoom_factor,#PB_Coordinate_User)
VectorSourceColor($FFFFFFFF)
FillVectorOutput()
For i=0 To 5
With myButtons(i)
AddPathBox(\x,\y,\w,\h)
VectorSourceColor(\color)
FillPath()
EndWith
Next
StopVectorDrawing()
EndProcedure
Procedure myEvent()
Protected Mx,My,x,y
; on vas changer les coordonnées pour que cela fonctionne
StartVectorDrawing(CanvasVectorOutput(#Main_canvas,#PB_Unit_Pixel))
ScaleCoordinates(Zoom_factor,Zoom_factor,#PB_Coordinate_User)
x=GetGadgetAttribute(#Main_canvas,#PB_Canvas_MouseX)
y=GetGadgetAttribute(#Main_canvas,#PB_Canvas_MouseY)
Mx=ConvertCoordinateX(x,0,#PB_Coordinate_Output,#PB_Coordinate_User)
My=ConvertCoordinateY(0,y,#PB_Coordinate_Output,#PB_Coordinate_User)
StopVectorDrawing()
Select EventType()
Case #PB_EventType_MouseMove
; ici je regarde sur quel bouton je suis
For i=0 To 5
With myButtons(i)
If Mx>=\x And Mx<=(\x+\w) And
My>=\y And My<=(\y+\h)
Debug \name
SetGadgetAttribute(#Main_canvas,#PB_Canvas_Cursor,#PB_Cursor_Hand)
ProcedureReturn
EndIf
EndWith
Next
Debug "NONE"
SetGadgetAttribute(#Main_canvas,#PB_Canvas_Cursor,#PB_Cursor_Default)
Case #PB_EventType_MouseWheel
; gestion du facteur de zoom
Select GetGadgetAttribute(#Main_canvas,#PB_Canvas_WheelDelta)
Case -1
If Zoom_factor>0.1 ;10%
Zoom_factor-0.1
EndIf
Case 1
If Zoom_factor<4 ;400%
Zoom_factor+0.1
EndIf
EndSelect
Draw()
Case #PB_EventType_MouseEnter
SetActiveGadget(#Main_canvas)
EndSelect
EndProcedure
Create_buttons()
OpenWindow(#Main_form,0,0,460,150,"teste",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
CanvasGadget(#Main_canvas,0,0,460,150,#PB_Canvas_Keyboard)
Draw()
BindGadgetEvent(#Main_canvas,@myEvent())
Repeat
WaitWindowEvent()
Until Event()=#PB_Event_CloseWindow