1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
| ; ==============================================================================
; - Saisie dans "InputRequester MultiLigne" - PureBasic Version 4.31 & 4.51
; 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 ; qui seraient attribué dynamiquement... 71=La suite du précédent ...
; ;
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'endroit ou srea traité le Tableau Text(i) et les Recevoir 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.
;
; Ou tableau des question à présenter.
;
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... (ici je pourrais aller jusque 6)
If Appel>Nombre:Appel=Nombre:EndIf ; Je m'auto-contrôle il ne peut-être plus grand que le nombre d'éléments 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 de saisie ---------------------------------------
; **********************************************************************************************
; >>>>>>>>>> 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
;************************************************************************************************************************** |
Partager