[TUTO] Les containers

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

[TUTO] Les containers

Message par microdevweb »

Les containers sont très utiles et puissants.

Ce tuto sera en deux parties
  • Première partie (Créer des gadgets étendus avec les containers)
  • Deuxième partie (Créer un barre d'outils extensible avec les containers)
Exemple partie 2:

Image

La partie deux est ICI

Voici la première partie, le module ne gère que les String et les combo. Mais vous pourrez facilement ajouté n'importe quel autre gadget.

Code : Tout sélectionner

; Module pour lma fabrication d'un gadget étendu
DeclareModule field
    ; Le type de gadget supporté (vous pouvez en ajouter) 
    Enumeration 
        #String
        #Combo
    EndEnumeration
    ; Les procédures qui seront accessible en dehors du module
    Declare Create(Id.i,X.i,Y.i,W.i,H.i,Label.s,Type.i=field::#String,Border=#PB_Container_BorderLess,Value.s="")
    Declare SetLabel(Id,Label.s)
    Declare SetValue(Id,Value.s)
    Declare SetFont(Id,LabelFont,FieldFont)
    Declare GetIdLabel(Id)
    Declare GetIdField(Id)
    Declare Resize(Id,X,Y,W,H)
EndDeclareModule
Module field
    Structure Pos
        X.i
        Y.i
        W.i
        H.i
    EndStructure
    Structure field
        Type.i
        myPos.pos
        Label.s
        Value.s
        IdContainer.i
        IdTxt.i
        IdGadget.i
        Border.i
        TxtFont.i
        FieldFont.i
    EndStructure
    Global NewMap  myField.field()
    ;{ Procédures PRIVEE (accessible uniquement dans le module)
    Procedure CreateString()
        Protected Y
        With myField()
            \IdContainer=ContainerGadget(#PB_Any,\myPos\X,\myPos\Y,\myPos\W,\myPos\H,\Border)
            \IdTxt=TextGadget(#PB_Any,0,Y,\myPos\W,(\myPos\H/2),\Label)
            Y+(\myPos\H/2)
            \IdGadget=StringGadget(#PB_Any,0,Y,\myPos\W,(\myPos\H/2),\Value)
            SetGadgetFont(\IdTxt,FontID(\TxtFont))
            SetGadgetFont(\IdGadget,FontID(\FieldFont))
            SetGadgetColor(\IdContainer,#PB_Gadget_BackColor,GetWindowColor(GetActiveWindow()))
            CloseGadgetList()
        EndWith
    EndProcedure
    Procedure CreateCombo()
        Protected Y
        With myField()
            \IdContainer=ContainerGadget(#PB_Any,\myPos\X,\myPos\Y,\myPos\W,\myPos\H,\Border)
            \IdTxt=TextGadget(#PB_Any,0,Y,\myPos\W,(\myPos\H/2),\Label)
            Y+(\myPos\H/2)
            \IdGadget=ComboBoxGadget(#PB_Any,0,Y,\myPos\W,(\myPos\H/2))
            SetGadgetFont(\IdTxt,FontID(\TxtFont))
            SetGadgetFont(\IdGadget,FontID(\FieldFont))
            SetGadgetColor(\IdContainer,#PB_Gadget_BackColor,GetWindowColor(GetActiveWindow()))
            CloseGadgetList()
        EndWith
    EndProcedure
    ;}
    ;{ Procédure PUBLIC (accessible en dehors du module)
    Procedure Create(Id.i,X.i,Y.i,W.i,H.i,Label.s,Type.i=field::#String,Border=#PB_Container_BorderLess,Value.s="")
        ; Si #PB_Any on recherche le premier emplacement vide dans la map
        If Id=#PB_Any
            Id=0
            While FindMapElement(myField(),Str(Id))<>0
                Id+1
            Wend
        EndIf
        If FindMapElement(myField(),Str(Id))<>0
            MessageRequester("Create Error","This ID "+Str(Id)+" already exists")
            ProcedureReturn -1
        EndIf
        AddMapElement(myField(),Str(Id))
        With myField()
            \TxtFont=LoadFont(#PB_Any,"Arial",10,#PB_Font_HighQuality)
            \FieldFont=LoadFont(#PB_Any,"Arial",10,#PB_Font_HighQuality)
            \Border=Border
            \Label=Label
            \Type=Type
            \Value=Value
            \myPos\X=X
            \myPos\Y=Y
            \myPos\W=W
            \myPos\H=H
            ; Selon le type de gadget choisi on crée le gadget
            Select Type
                Case #String
                    CreateString()
                Case #Combo
                    CreateCombo()
            EndSelect
        EndWith
    EndProcedure
    Procedure SetLabel(Id,Label.s)
        ;Change le label du gadget
        If FindMapElement(myField(),Str(Id))=0
            MessageRequester("SetLabel Error","This ID "+Str(Id)+" not exists")
            ProcedureReturn #False
        EndIf
        With myField()
            \Label=Label
            SetGadgetText(\IdTxt,Label)
        EndWith
        ProcedureReturn #True
    EndProcedure
    Procedure SetValue(Id,Value.s)
        ; Change la valeur du gadget, ou l'élément sélectionné du combo
        If FindMapElement(myField(),Str(Id))=0
            MessageRequester("SetValue Error","This ID "+Str(Id)+" not exists")
            ProcedureReturn #False
        EndIf
        With myField()
            \Value=Value
            Select \Type
                Case #String
                    SetGadgetText(\IdGadget,Value)
                Case #Combo
                    SetGadgetState(\IdGadget,Val(Value))
            EndSelect
        EndWith
        ProcedureReturn #True
    EndProcedure
    Procedure SetFont(Id,LabelFont,FieldFont)
        ; Change les polices de caractère
        If FindMapElement(myField(),Str(Id))=0
            MessageRequester("SetFont Error","This ID "+Str(Id)+" not exists")
            ProcedureReturn #False
        EndIf
        With myField()
            \TxtFont=LabelFont
            \FieldFont=FieldFont
        EndWith
        ProcedureReturn #True
    EndProcedure
    Procedure GetIdLabel(Id)
        ; Retourne l'identifient du gadget texte pour l'utilisation de commande Pb standard
        If FindMapElement(myField(),Str(Id))=0
            MessageRequester("GetIdLabel Error","This ID "+Str(Id)+" not exists")
            ProcedureReturn -1
        EndIf
        With myField()
            ProcedureReturn \IdTxt
        EndWith
    EndProcedure
    Procedure GetIdField(Id)
        ; Retourne l'identifient du gadget  pour l'utilisation de commande Pb standard
        If FindMapElement(myField(),Str(Id))=0
            MessageRequester("GetIdField Error","This ID "+Str(Id)+" not exists")
            ProcedureReturn -1
        EndIf
        With myField()
            ProcedureReturn \IdGadget
        EndWith
    EndProcedure
    Procedure Resize(Id,X,Y,W,H)
        ; Redimmentionne ou / et repositionne le gadget étendu
        ; similaire à ResizeGadget()
        If FindMapElement(myField(),Str(Id))=0
            MessageRequester("Resize Error","This ID "+Str(Id)+" not exists")
            ProcedureReturn #False
        EndIf
        With myField()\myPos
            If X<>#PB_Ignore    
                \X=X
            EndIf
            If Y<>#PB_Ignore    
                \Y=Y
            EndIf
            If W<>#PB_Ignore    
                \W=W
            EndIf
            If H<>#PB_Ignore    
                \H=H
            EndIf
            ResizeGadget(myField()\IdContainer,\X,\Y,\W,\H)
            ResizeGadget(myField()\IdTxt,#PB_Ignore,#PB_Ignore,\W,(\H/2))
            ResizeGadget(myField()\IdGadget,#PB_Ignore,(\H/2),\W,(\H/2))
        EndWith
    EndProcedure
    ;}
EndModule


; Code de teste

#MainForm=0
Enumeration 
    #String1
    #String2
    #String3
    #Combo1
    #Button
EndEnumeration
Global ActionTrue.b=#False
Procedure Exit()
    End
EndProcedure
Procedure EventButton()
    If ActionTrue
        field::Resize(#String3,350,#PB_Ignore,#PB_Ignore,60)
        ActionTrue=#False
    Else
        field::Resize(#String3,500,#PB_Ignore,#PB_Ignore,100)
        ActionTrue=#True
    EndIf
EndProcedure
Procedure OpenMainForm()
    Protected flag=#PB_Window_ScreenCentered|#PB_Window_SystemMenu
    Protected X=50,Y=50
    OpenWindow(#MainForm,0,0,800,600,"TUTO les containers",flag)
    field::Create(#String1,X,Y,100,60,"String 1")
    X+150
    field::Create(#String2,X,Y,100,60,"String 2",field::#String,#PB_Container_Double,"teste")
    BindEvent(#PB_Event_CloseWindow,@Exit(),#MainForm)
    X+150
    field::Create(#String3,X,Y,100,60,"String 3",field::#String,#PB_Container_Flat,"teste 2")
    BindEvent(#PB_Event_CloseWindow,@Exit(),#MainForm)
    X=50
    Y+100
    field::Create(#Combo1,X,Y,100,60,"Combo 1",field::#Combo)
    For N=1 To 10
        AddGadgetItem(field::GetIdField(#Combo1),-1,"Texte "+Str(N))
    Next
    field::SetValue(#Combo1,"0")
    X+150
    Y+30
    ButtonGadget(#Button,X,Y,100,30,"Déplacer un string")
    BindGadgetEvent(#Button,@EventButton())
EndProcedure
OpenMainForm()
Repeat:WaitWindowEvent():ForEver
Dernière modification par microdevweb le ven. 13/mai/2016 16:57, modifié 2 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [TUTO] Les containers

Message par falsam »

Il va falloir que tu expliques quel est l’intérêt d'encapsuler chaque gadget dans un container !!

J'espére que tu as prévu le resize de chacun des container et du gadget encapsulé à l'intérieur ?

PS : Je pense qu'on est loin d'un tuto. Je pense que le sujet est plus proche de la discussion pour le moment. Voir même .... discutable. Mais comme dirais Pat, ce n'est que mon avis ^^. Si vous êtes d'accord, je propose de déplacer le sujet vers Applications ou Discussion générale.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: [TUTO] Les containers

Message par microdevweb »

Partie 2 (Une Toolbar extensible)

Image

Dans cette exemple pour ne pas vous imposer le chargement d'image, les icone sont simplement faites avec un fond coloré.

Code : Tout sélectionner

; Pour ne pas imposer le chargement d'image les icone seront juste coloré

; Module pour la fabrication d'une ToolBar
DeclareModule TB
    Declare Init(*Callback)
    Declare AddIcone(Id,Image=0,BgColor.i=-1,ToolTip.s="")
EndDeclareModule
Module Tb
    EnableExplicit
    UsePNGImageDecoder()
    ; Constante qui peuvent être changée
    #IconeSize=40 ; Taille du canvas qui recevra l'icone
    #ImageSize=32 ; Taille du l'image
    #BgColor=$FCC0C0C0 ; La couleur de fond de la Toolbar
    #HoverColor=$FC000000 ; La couleur du cadre qui sera affiché quant la souris survol l'icone
    #ArrowBgColor=$FC000000 ; La couleur des flêches non survolées
    #ArrowHoverBgColor=$FC808080 ;La couleur des flêches survolée
                                 ;{ Structure 
    Structure icone
        IdCanvas.i 
        BgColor.i
        IdImage.i
        ToolTip.s
    EndStructure
    Structure Tb
        mainContainer.i ; le container principale
        iconeContainer.i; le container des icone
        Map myIcone.icone()
    EndStructure
    Global myTb.Tb
    ;}
    ; Les image des flèches de déplacement
    Global ArrowLeft,ArrowRight
    ; La valeur de déplacement quand la taille des icone est suppérieur à la largeur de la fenêtre
    Global Desplace.i
    ; La procédure callback appellée quand un clique sur un icone
    Global *myCallBack
    ;{ PRIVATE procédures
    Declare DrawLeftArrow(Hover.b=#False)
    Declare DrawRightArrow(Hover.b=#False)
    Declare DrawIcone(Hover.b=#False)
    Declare Show()
    Procedure EventArrow()
        Protected IdArow=GetGadgetData(EventGadget())
        Select EventType()
            Case #PB_EventType_MouseEnter
                ; La souris est sur la flêche
                ; Je change le curseur
                SetGadgetAttribute(EventGadget(),#PB_Canvas_Cursor,#PB_Cursor_Hand)
                ; Je dessine la flêche
                Select IdArow
                    Case 0 ; flêche gauche
                        DrawLeftArrow(#True)
                    Case 1 ; flêche droite
                        DrawRightArrow(#True)
                EndSelect
            Case #PB_EventType_MouseLeave
                ; La souris quitte la flêche
                ; Je change le curseur
                SetGadgetAttribute(EventGadget(),#PB_Canvas_Cursor,#PB_Cursor_Default)
                ; Je dessine la flêche
                Select IdArow
                    Case 0 ; flêche gauche
                        DrawLeftArrow()
                    Case 1 ; flêche droite
                        DrawRightArrow()
                EndSelect
            Case #PB_EventType_LeftClick
                Select IdArow
                    Case 0 ; flêche gauche
                        If Desplace>0
                            Desplace-1
                            Show()
                        EndIf
                    Case 1 ; flêche droite
                        If Desplace<(MapSize(myTb\myIcone())-1)
                            Desplace+1
                            Show()
                        EndIf
                EndSelect
        EndSelect
    EndProcedure
    Procedure DrawLeftArrow(Hover.b=#False)
        ; Dessin de la flêche
        Protected BgColor
        ; Souris sur la flêche
        If Hover
            BgColor=#ArrowHoverBgColor
        Else ; souris pas sur la flêche
            BgColor=#ArrowBgColor
        EndIf
        StartVectorDrawing(CanvasVectorOutput(ArrowLeft))
        VectorSourceColor(#BgColor)
        FillVectorOutput()
        MovePathCursor(0,(#IconeSize/2),#PB_Path_Relative)
        AddPathLine(#IconeSize/2,-(#IconeSize/2),#PB_Path_Relative)
        AddPathLine(0,#IconeSize,#PB_Path_Relative)
        AddPathLine(-(#IconeSize/2),-(#IconeSize/2),#PB_Path_Relative)
        VectorSourceColor(BgColor)
        FillPath()
        StopVectorDrawing()
    EndProcedure
    Procedure DrawRightArrow(Hover.b=#False)
        ; Dessin de la flêche
        Protected BgColor
        ; Souris sur la flêche
        If Hover
            BgColor=#ArrowHoverBgColor
        Else ; souris pas sur la flêche
            BgColor=#ArrowBgColor
        EndIf
        StartVectorDrawing(CanvasVectorOutput(ArrowRight))
        VectorSourceColor(#BgColor)
        FillVectorOutput()
        MovePathCursor(#IconeSize/2,(#IconeSize/2),#PB_Path_Relative)
        AddPathLine(-#IconeSize/2,-(#IconeSize/2),#PB_Path_Relative)
        AddPathLine(0,#IconeSize,#PB_Path_Relative)
        AddPathLine(#IconeSize/2,-(#IconeSize/2),#PB_Path_Relative)
        VectorSourceColor(BgColor)
        FillPath()
        StopVectorDrawing()
    EndProcedure
    Procedure MakeArrow(W)
        ; Création du canvas de la flêche gauche
        ArrowLeft=CanvasGadget(#PB_Any,0,0,#IconeSize/2,#IconeSize)
        ; Je mémorise une donnée qui me sera utilise pour la gestion des événement
        SetGadgetData(ArrowLeft,0)
        ; Je masque la flêche
        HideGadget(ArrowLeft,#True)
        ; Je place le CallBack
        BindGadgetEvent(ArrowLeft,@EventArrow())
        ; Dessin de la flêche
        DrawLeftArrow()
        ; Création du canvas de la flêche droite
        ArrowRight=CanvasGadget(#PB_Any,W-#IconeSize/2,0,#IconeSize,#IconeSize)
        ; Je masque la flêche
        HideGadget(ArrowRight,#True)
        ; Je mémorise une donnée qui me sera utilise pour la gestion des événement
        SetGadgetData(ArrowRight,1)
        ; Je place le CallBack
        BindGadgetEvent(ArrowRight,@EventArrow())
        ; Dessin de la flêche
        DrawRightArrow()
    EndProcedure
    Procedure SendCallBack(Id)
        
    EndProcedure
    Procedure EventIcone()
        Protected Id=GetGadgetData(EventGadget())
        If FindMapElement(myTb\myIcone(),Str(Id))=0
            MessageRequester("EventIcone Error","This Id "+Str(Id)+" do not exist")
            ProcedureReturn 
        EndIf
        With myTb\myIcone()
            Select EventType()
                Case #PB_EventType_MouseEnter
                    ; La souris est sur l'icone
                    ; Je change le curseur
                    SetGadgetAttribute(EventGadget(),#PB_Canvas_Cursor,#PB_Cursor_Hand)
                    ; Je dessine l'icone
                    DrawIcone(#True)
                Case #PB_EventType_MouseLeave
                    ; La souris quitte l'icone
                    ; Je change le curseur
                    SetGadgetAttribute(EventGadget(),#PB_Canvas_Cursor,#PB_Cursor_Default)
                    ; Je dessine la l'icone
                    DrawIcone()
                Case #PB_EventType_LeftClick
                    CallFunctionFast(*myCallBack,Id)
            EndSelect
        EndWith
    EndProcedure
    Procedure DrawIcone(Hover.b=#False)
        Protected X
        With myTb\myIcone()
            StartDrawing(CanvasOutput(\IdCanvas))
            ; Je place le fond de la toolbar
            DrawingMode(#PB_2DDrawing_Default)
            Box(0,0,#IconeSize,#IconeSize,#BgColor)
            ; Centrage du fond et / ou de l'image
            ; Comme c'est une carré Y est égal à Y
            X=(#IconeSize/2)-(#ImageSize/2)
            ; Si une fond à été renseigné
            If \BgColor<>-1 
                Box(X,X,#ImageSize,#ImageSize,\BgColor)
            EndIf
            ; Si une image à été renseignée
            If \IdImage>0
                DrawingMode(#PB_2DDrawing_AlphaClip)
                DrawImage(X,X,ImageID(\IdImage),#ImageSize,#ImageSize)
            EndIf
            ; Si l'icone est survolée j'affiche le cadre
            If Hover
                DrawingMode(#PB_2DDrawing_Outlined)
                Box(0,0,#IconeSize,#IconeSize,#HoverColor)
            EndIf
            StopDrawing()
        EndWith
    EndProcedure
    Procedure Show()
        Protected WC,X
        ; La taille du container principale
        Protected W=GadgetWidth(myTb\mainContainer)
        ; La taille totale des icones
        Protected WI=MapSize(myTb\myIcone()) * #IconeSize
        ; Si la taille total des icones est plu s grande que le container principla
        If WI>W
            ; Je retire la largeur des flêche (= à la moitié de la taille d'un icone)
            WC=W-#IconeSize
            ; J'affiche les flêches
            HideGadget(ArrowLeft,#False)
            HideGadget(ArrowRight,#False)
            ; Je resize le container des icone
            ResizeGadget(myTb\iconeContainer,#IconeSize/2,#PB_Ignore,WC,#PB_Ignore)
            ; Je repositionne la flêche droite
            ResizeGadget(ArrowRight,W-(#IconeSize/2),#PB_Ignore,#PB_Ignore,#PB_Ignore)
        Else
            WC=W
            Desplace=0
            ; Je masque les flêches
            HideGadget(ArrowLeft,#True)
            HideGadget(ArrowRight,#True)
            ; Je resize le container des icone
            ResizeGadget(myTb\iconeContainer,#PB_Ignore,#PB_Ignore,WC,#PB_Ignore)
        EndIf
        ; Je resize le container des icone
        ResizeGadget(myTb\iconeContainer,#PB_Ignore,#PB_Ignore,WC,#PB_Ignore)
        ; Je place tous les icones, par rapport au flêche et je dessine l'icone
        X-(#IconeSize*Desplace)
        ForEach myTb\myIcone()
            With  myTb\myIcone()
                ResizeGadget(\IdCanvas,X,#PB_Ignore,#PB_Ignore,#PB_Ignore)
                DrawIcone()
                X+#IconeSize
            EndWith
        Next
    EndProcedure
    Procedure EventSizeWindow()
        Protected W=WindowWidth(GetActiveWindow())
        ResizeGadget(myTb\mainContainer,#PB_Ignore,#PB_Ignore,W,#PB_Ignore)
        Show()
    EndProcedure
    ;}
    ;{ PUBLIC procédures
    Procedure Init(*Callback)
        Protected W=WindowWidth(GetActiveWindow())
        With myTb
            *myCallBack=*Callback
            ; Création du container principale 
            \mainContainer=ContainerGadget(#PB_Any,0,0,W,#IconeSize)
            ; Je place la couleur de fond
            SetGadgetColor(\mainContainer,#PB_Gadget_BackColor,#BgColor)
            ; Création des image pour les flêches
            MakeArrow(W)
            ; Création du container pour les icones
            \iconeContainer=ContainerGadget(#PB_Any,0,0,W,#IconeSize)
            ; Je place la couleur de fond
            SetGadgetColor(\iconeContainer,#PB_Gadget_BackColor,#BgColor)
            ; Je ferme le container des icones
            CloseGadgetList()
            ; Je ferme le container principal
            CloseGadgetList()
            ; Place le callback quand l'user change la taille de la fenêtre
            BindEvent(#PB_Event_SizeWindow,@EventSizeWindow(),GetActiveWindow())
        EndWith
    EndProcedure
    Procedure AddIcone(Id,Image=0,BgColor.i=-1,ToolTip.s="")
        With myTb\myIcone()
            ; Si id=#pb_Any recherche la première place vide dans la map
            If Id=#PB_Any
                Id=0
                While FindMapElement(myTb\myIcone(),Str(Id))<>0
                    Id+1
                Wend
            EndIf
            ; Vérifie que la map n'existe pas déjà
            If FindMapElement(myTb\myIcone(),Str(Id))<>0
                MessageRequester("AddIcone Error","This Id "+Str(Id)+" already exists")
                ProcedureReturn -1
            EndIf
            ; J'ajoute la map
            AddMapElement(myTb\myIcone(),Str(Id))
            ;J'ouvre le container des icones
            OpenGadgetList(myTb\iconeContainer)
            \BgColor=BgColor
            ; Si une image est renseignée je la charge
            If Image>0
                \IdImage=CatchImage(#PB_Any,Image)
            Else
                \IdImage=0
            EndIf
            \ToolTip=ToolTip
            ; Je crée le canvas la posiiton X ne sera pas renseignée car elle sera calculée après
            \IdCanvas=CanvasGadget(#PB_Any,0,0,#IconeSize,#IconeSize)
            ; Je mémorise l'id pour event
            SetGadgetData(\IdCanvas,Id)
            ; J'ajoute le ToolTip
            GadgetToolTip(\IdCanvas,ToolTip)
            ; Je place le callback
            BindGadgetEvent(\IdCanvas,@EventIcone())
            ; Je ferme le container des icones
            CloseGadgetList()
            ; j'affiche les icones
            Show()
            ProcedureReturn Id
        EndWith
    EndProcedure
    ;}
EndModule


; Code de teste

#MainForm=0

Procedure Exit()
    End
EndProcedure
Procedure EventIcone(Id)
    Debug Id
EndProcedure
Procedure OpenMainForm()
    Protected flag=#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget
    Protected X=50,Y=50
    OpenWindow(#MainForm,0,0,800,600,"TUTO les containers",flag)
    BindEvent(#PB_Event_CloseWindow,@Exit(),#MainForm)
    ; Initialisation de la toolbar
    TB::Init(@EventIcone())
    ; Ici j'ajoute 10 icones, vous pouvez vous amusez avec des images
    ; Pour ajouter des images utiliser IncludeBinary dans DataSection et
    ; Renseignez l'image comme ceci ?Label_de_IncludeBinary
    For N=1 To 10
        TB::AddIcone(N,0,RGB(Random(255,0),Random(255,0),Random(255,0)),"Icone "+Str(N))
    Next
EndProcedure
OpenMainForm()
Repeat:WaitWindowEvent():ForEver
Dernière modification par microdevweb le ven. 13/mai/2016 17:01, modifié 1 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: [TUTO] Les containers

Message par Shadow »

J'adore t'es "Tuto" Micro, j'veux dire t'es exemple quoi :)
Merci.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: [TUTO] Les containers

Message par Kwai chang caine »

Oui... autant de travail pour autrui....force le respect 8O
J'ai du flickering au resize sur le second code
Merci du partage 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre