PureBasic

Forums PureBasic
Nous sommes le Ven 20/Sep/2019 0:12

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
 Sujet du message: [TUTO] zoom pour canvas
MessagePosté: Lun 11/Sep/2017 11:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
Bonjour à tous,

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

Image

Code:
; 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

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Dernière édition par microdevweb le Lun 11/Sep/2017 13:14, édité 3 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO zoom pour canvas
MessagePosté: Lun 11/Sep/2017 11:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6650
Localisation: Isere
Bonjour MicroDevWeb
Merci du partage 8)

J'ai une erreur à la ligne
Code:
\color=Random($FFFFFF00,$FF0000FF)
dans la procedure Create_buttons()
Random min ne peut être négatif :|

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO zoom pour canvas
MessagePosté: Lun 11/Sep/2017 12:05 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
Bonjour Kwai chang caine,

J'ai fait un petite modif, cela ne devrait plus posé de problème en x86

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] zoom pour canvas
MessagePosté: Lun 11/Sep/2017 12:18 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6650
Localisation: Isere
Merci MicroDevWeb 8)
Ca marche nickel maintenant :D
Je sais pas si c'est l'effet voulu, mais le zoom ne marche que si je clique une fois sur les carrés
Et c'est toute l'image qui zoome, du coup les carrés disparaissent en bas de la fenetre, puisque l'espace blanc du haut grandit aussi

Autrement top cool !!!
Encore merci du partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] zoom pour canvas
MessagePosté: Lun 11/Sep/2017 12:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Juin/2016 12:31
Messages: 26
Bonjour,

Très bien ce zoom.

Effectivement, il faut cliquer dans la fenêtre pour que le zoom fonctionne. Peut-être faut-il mettre le focus sur le Canvas ?

En tout cas, merci pour le partage.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [TUTO] zoom pour canvas
MessagePosté: Lun 11/Sep/2017 13:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
@Kwai chang caine,@François,

J'ai modifié le code de sorte que le canvas prenne le focus au survol de la souris

Code:
Case #PB_EventType_MouseEnter
      SetActiveGadget(#Main_canvas)


:roll: En temps normal je place tjr cette option

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye