TUTO (gestion de canvas)

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

TUTO (gestion de canvas)

Message par microdevweb »

Voici une petite gestion de canvas simple, avec par exemple des boutons qui sont créés dans une liste structurée

Code : Tout sélectionner

#MainForm=0
Structure Pos
    X.i
    Y.i
    W.i
    H.i
EndStructure
Structure Button
    myPos.Pos
    IdCanvas.i
    BgColor.i
EndStructure
Global NewList myButton.Button()
Procedure Exit()
    End ; Fin de programme
EndProcedure
Procedure EventCanvas()
    ; Ici je relève l'index de la liste ou à lieu l'événément
    Protected Id=GetGadgetData(EventGadget())
    SelectElement(myButton(),Id)
    Select EventType()
        Case #PB_EventType_MouseEnter
            Debug "Vous êtes sur le bouton "+Str(Id)
        Case #PB_EventType_MouseLeave
            Debug "Vous quitter sur le bouton "+Str(Id)
        Case #PB_EventType_LeftClick
             Debug "Vous cliquer sur le bouton "+Str(Id)
        ; Voi dans la doc Pb la liste des types d'événement
    EndSelect
EndProcedure
Procedure CreateButton()
    Protected N,X=10
    ; Ici je vais créer 5 boutons 
    For N=1 To 5
        AddElement(myButton())
        With myButton()
            \myPos\X=X
            \myPos\Y=10
            \myPos\W=50
            \myPos\H=50
            ; Ici je prend un couleur aléatoire
            \BgColor=RGB(Random(255,0),Random(255,0),Random(255,0))
            ; Je crée le canvas
            \IdCanvas=CanvasGadget(#PB_Any,\myPos\X,\myPos\Y,\myPos\W,\myPos\H)
            ; Je mémorise l'index de la liste dans le canvas
            SetGadgetData(\IdCanvas,ListIndex(myButton()))
            ; Je place le callBack pour la gestion des événements
            BindGadgetEvent(\IdCanvas,@EventCanvas())
            ; Je dessine le fond dans mon canvas
            StartDrawing(CanvasOutput(\IdCanvas))
            DrawingMode(#PB_2DDrawing_Default)
            Box(0,0,\myPos\W,\myPos\H,\BgColor)
            StopDrawing()
            X+60
        EndWith
    Next
EndProcedure
Procedure OpenMainForm()
    OpenWindow(#MainForm,0,0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_Maximize)
    ; Je crée les bouton
    CreateButton()
    ; Je place le callback pour quitter la fenêtre
    BindEvent(#PB_Event_CloseWindow,@Exit(),#MainForm)
EndProcedure

; Ouverture de la fenêtre principale
OpenMainForm()
; MainLoop simple puisque gestion par Bind
Repeat:WaitWindowEvent():ForEver
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège