PureBasic

Forums PureBasic
Nous sommes le Dim 26/Mai/2013 7:37

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: InputRequester Multiligne...
MessagePosté: Mar 13/Oct/2009 10:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 29/Fév/2008 16:17
Messages: 439
Localisation: Belgique
Bonjour,

Un petit code simple et qui peut s'avérer pratique à intégrer dans n'importe quoi...

Comme je l'indique il permet de saisir plusieurs lignes de réponses pour autant de questions
posées. Les directives sont simple et dans les commentaires !

Le Point intéressant c'est l'affectation et le contrôle dynamique des ID des gadgets !
Ou comment se passer de "#PB_Any" quand ce n'est pas indispensable !
Code:
; ==========================================================
;  -       Saisie  dans  "InputRequester MultiLigne"     -    PureBasic Version 4.31 & 4.40
;                                                                                                  28-08-2009
;           OU Fenetre à champs variable...                       ;                                                                                                     GeBonet   
;================================================================
;   Le BUT ici est de disposer d'un moyen d'appeler une fenêtre qui se dimensionne SEULE en fonction du
;   nombre d'éléments demandé... Et évidement qui renvois les réponses correspondantes aux points envoyés.
;
;   Soit un espèce de "InputRequester" multiple... 
;
;     Pour lequel on donne : Un titre, une position d'affichage (x,y) la table de question, la tabe
;                                    pour les réponses et le nombre de point à montrer et à remplir....
;
;   SOIT comme ci-après => PointFenetre(NomEntete$ ,IniX ,IniY , Array Text.s(1), Array Rep.s(1), A_Remplir) 
;   
;   On pourrait y ajouter des exigeances comme demander la couleur de fond, des caractères, la police ou encore
;   le type à saisir (Alpha ou Numérique, voir réponse visible ou non (mots de passe)... 
;
;===========================================================
;   Mais l'intérêt PRINCIPAL ICI est de montrer l'aspect dynamique des affectation de Gadget !!!
;   ---------
;   AUSSI avec l'utilisation exclusive d'instructions PureBasic...
;===========================================================
Enumeration
    #Fenetre_Champ       ; Constante de la fenêtre qui sera utilisé...
    #DebutChamps          ; Constante de Base pour le 1er Gadget d'affichage de la table des questions.
    ;                                     CETTE CONSTANTE SERVIRA de BASE d'incrémentation pour fournir
    ;                                     le n° unique des questions suivantes s'il y a lieu.
    ;
    #AutrePoint=50          ; Constante de départ d'un AUTRE POINT de constante dynamique !!!
    ;  **************************************************************
    ;#bouton_valide         ; Ne serons pas utilisé comme tels car comme les gadgets suivants seront affectés
    ;#bouton_annule        ; dynamiquement ils risquent alors de prendre une valeur de constante existante et
    ; donc de ne pas être affiché... d'ou !!!
    ;
    ;  LA REGLE :       Lorsque l'on attribue des ID de gadget dynamiquement ils doivent   
    ;         commencer à un point connu (ici "#DebutChamps") puis rester sous contrôle du
    ;         programme jusqu'a l'autre Constante identifié qui servirait de départ d'un autre point.
    ;         Comme par exemple ICI : "#AutrePoint"
    ;  -------------------------------------------------------------------------------------
    #bouton_valide =70  ;  Ou alors une Affectation qui dans ce cas ci ne risque pas d'entrer en contact d'autres...
    #bouton_annule=71  ;  Idem ...
                                      ;
EndEnumeration        ;   Les problèmes sont souvent issus de détails...  Ou de manque d'info claire !!!                 
;------------------------------------------------------------------------------------------
Define Nombre.i, IniX.i, IniY.i, Appel
Nombre=6                     ; Nombre d'éléments MAXIMUM du tableau des données pouvant-être saisie...
Dim Text.s(Nombre)     ; Table des Questions
Dim Rep.s(Nombre)     ; Table des Réponses correspondante
;------------------------------------------------------------------------------------------

Declare PointFenetre(NomEntete$, IniX , IniY , Array Text.s(1) , Array Rep.s(1) ,Nombre) 
;
;------ Debut Programme ou d'endrit ou srea traité le Tableau Text(i) et les Recoir les réponses Rep(i) >-----------------
;
;   ;  ------------ Question ? ------------<  On pourrait aussi avec une deuxième dimension et le point 0    >-------------------
    ;
    ;                                                        Questions qui peuvent venir d'une ligne de DATA ou d'un fichier annexe.
    ;
    Text(0) = "Nom prenom"          ;        Text(0,0) =   Type  parmis ceux ci ou plus limité...
    Text(1) = "Adresse +N°"          ;        Type =0  => Alphanumérique
    Text(2) = "Code Postal"           ;        Type =1  => Numérique ENTIER Long
    Text(3) = "Localité"                  ;         Type =2  => Numérique Quad
    Text(4) = "Pays"                      ;         Type =3  => Numérique Double/Flottant
    Text(5) = "Adresse Email"       ;         Type =4  => Mots de Passe (Invisible (*******))
    ;
    ;  -----------------------------------------------------------------------------------------
    For i=0 To Nombre:Rep(i) = "":Next i  ; Mise à zéro de la table des réponses..
    ;  ----------------------------------------------------------------------------------
    NomEntete$="Identification"                    ; Titre de la fenetre     
    IniX=400:IniY=200                                    ; Position sur l'écran 
    ;
    Appel=4                                                    ; Nombre d'élément du tableau à utiliser... 
    If Appel>Nombre:Appel=Nombre:EndIf ; Je m'auto-contrôle il ne peut-être plus grand que le nombre d'élémnts du tableau :-))
    ;  ------------------------------------------------------------------------------------
    Resultat=PointFenetre(NomEntete$, IniX ,IniY, Text() , Rep() , Appel)  ; Appel de la procédure.... 
    Debug "Retour Procedure : "+Str(Resultat)
    ;  ----------------------------------------------------------------------------------
    For i=0 To Nombre:Debug Rep(i):Next i  ; Affichage des données saises en fonction de "Appel"
    ;
    ; A partir d'ici ou ceci Rep(n) peut être utilisé pour être classé dans liste chainée ou un Tableau deux dimensions
    ; type Table_Adresse(i,n) les Rep(n) sont les lignes de Table_Adresse(i,n)...
    ;
End
;
; ***************************************************************
;
;----------------------- Procedure ------------------------------------------------
; ****************************************************************
; >>>>>>>>>>               Fenêtre Commune de question                      <<<<<<<<<<
; ****************************************************************
Procedure PointFenetre(Titre$, IniX , IniY , Array Text.s(1) , Array Rep.s(1) ,Nombre)
   
    Taille=ArraySize(Text())
    For i=0 To Nombre           ; Determination du champs le plus long
        If Lmax<Len(Text(i)):Lmax=Len(Text(i)):EndIf
    Next i
    ;-----------------------------  Calcul des dimensions -------------------------------------
    HauteurBouton    = 20
    Largeur_fenetre  = (100+Lmax)*2+20                      ; Largeur de la fenêtre
    Hauteur_Fenetre= Nombre*30+HauteurBouton+50 ; Hauteur de la fenêtre (50 = 30 titre + 20 interligne avant boutons ! )
    PosYBouton       =Hauteur_Fenetre-30                     ; Position Y des boutons
    ; ---------------------------------------------------------------------------------------------------
    ;
    WindWid=Largeur_fenetre : WindHigh=Hauteur_Fenetre :  Cas=0   
    ;   Fenetre d'interrogation multibox ...
    If OpenWindow(#Fenetre_Champ,IniX,IniY,WindWid,WindHigh,"",#PB_Window_BorderLess)
       
        SetWindowColor(#Fenetre_Champ,$0AFAF5)    ; Colorier la fenêtre
        StickyWindow(#Fenetre_Champ, 1)
        ;   
        Milieu=WindWid/2                                                  ; Milieu de la Largeur_fenetre           
        PosYDep=35                                                         ; Position départ 
        PosY=PosYDep                                                    ; Position Y   
        ; -------------------------------------   Titres ------------------------------------------------
        TextGadget(#DebutChamps,40, 5, Milieu+50,25,Titre$)
        SetGadgetFont(#DebutChamps+j,LoadFont(#DebutChamps+j, "Arial", 18))
        SetGadgetColor(#DebutChamps+j,#PB_Gadget_BackColor, $0AFAF5)
        SetGadgetColor(#DebutChamps+j,#PB_Gadget_FrontColor, $E25048)
        ; ---------------------------------  Question et champs pour réponses --------------
        For j=1 To Nombre
            Texte$=Trim(Text(j-1))
            TextGadget(#DebutChamps+j,10, PosY, Milieu-15,20,Texte$)     ; Attention ici les ID sont attribué dynamiquement !
            StringGadget(#AutrePoint+j, Milieu, PosY,Milieu-10,20,"")            ; Attention ici les ID sont attribué dynamiquement !
                ;
                SetGadgetFont(#DebutChamps+j,LoadFont(#DebutChamps+j, "Arial", 12))
                SetGadgetColor(#DebutChamps+j,#PB_Gadget_BackColor, $0AFAF5)
                SetGadgetColor(#DebutChamps+j,#PB_Gadget_FrontColor, $E25048)
            PosY+30
        Next j
        ; -----------------------------------------------------------------------------------------------
        BoutonVal=#AutrePoint+j  ; ICI j'affecte au "Bouton" une ID Dynamique pour l'exemple
        ;
        ButtonGadget(BoutonVal,10,PosYBouton,100,20,"Valider",#PB_Button_Toggle)     
        ButtonGadget(#bouton_annule,Largeur_fenetre-120,PosYBouton,100,20,"Annuler",#PB_Button_Toggle)
        ;   Et ICI c'est "#bouton_annule"
        ; -----------------------------------------------------------------------------------------------   
    EndIf               
;   ********************************************************************************************
    Repeat
        Select WaitWindowEvent (#Fenetre_Champ)       ; Traite les boutons....
             Case #PB_Event_Gadget
                 Select EventGadget ()                                   ; Selectionne en fonction de ....???
                    ; -----------------------------------------------------------------------------------
                    Case BoutonVal                                          ; VALIDE  pour MODIF ou AJOUT
                        ;
                        For j=1 To Nombre                                 ; Récupère les données dans le tableau
                            Rep(j-1)=GetGadgetText (#AutrePoint+j)     
                        Next j       
                        Fermer_window1=1 :Cas=1
                        ; -------------------------------------------------------------------------------- 
                    Case #bouton_annule ;BoutonAnul             ; Annule l'entrée
                        Fermer_window1=1 :Cas=9
                        ; --------------------------------------------------------------------------------   
                EndSelect
        EndSelect
    Until Fermer_window1=1
    StickyWindow(#Fenetre_Champ,0)
    CloseWindow (#Fenetre_Champ)                             ; Fermeture de la fenêtre ajoute...
    ; ---------------------------------
    ProcedureReturn Cas
    ;
EndProcedure
;*******************************************************

Voilà, si ça peut servir : :wink: Tant mieux !

_________________
Windows Xp Sp3 & Pb 4.6 RC1 & Pb 5.0 & Pb 5.11
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-


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

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Exabot [Bot] 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 à:  

 


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