4D v16Tableaux, popup, listbox |
||||||||||||||||||||||||||||||||||||
|
4D v16
Tableaux, popup, listbox
|
Etape | Variable simple | Variable tableau |
Initialisation | C_TEXTE(vTexte) | TABLEAU TEXTE(TabTexte;10) `10 lignes |
Valorisation | vTexte:="Tascher de la Pagerie" | TabTexte{1}:="De Beauharnais" `ligne 1 |
TabTexte{2}:="Barras" `ligne 2 | ||
TabTexte{3}:="Bonaparte" `ligne 3 | ||
... | ||
Utilisation | $NbCar:=Longueur(vTexte) | $Amant:=TabTexte{1} |
Effacer le contenu | EFFACER VARIABLE(vTexte) | TABLEAU TEXTE(TabTexte;0) |
(le comportement est différent entre une application interprétée et | ||
compilée, voir la documentation 4D) | ||
Visualisation sur un formulaire | Donner le nom de la variable à un objet de type variable | Donner le nom de la variable à un objet de type zone de défilement, pop up menu... |
Types | Entier, Entier long, Numérique, Alpha, Texte, Booléen, Date, Heure, Image, Blob, pointeurs | Identiques aux types de variables sauf Heure et Blob |
On remarque que les similitudes sont nombreuses.
Le nom du tableau est utilisé parfois avec les accolades {}, parfois seul. Il s’agit dans ce dernier cas d’une variable (entier long) créée automatiquement par 4D.
Cette variable, associée au tableau, sert d’indice (numéro de ligne) de tableau. C’est par son intermédiaire qu’on peut savoir quelle est la ligne choisie par l’utilisateur, ou forcer la sélection de telle ou telle ligne dans les objets d'interface (popup menu, ...).
C’est la raison pour laquelle vous verrez souvent écrit dans les bases exemples ou les développements des autres développeurs cette syntaxe plus concise :
[INTERVENTIONS]Objet:=TabObjets{TabObjets}
[INTERVENTIONS]Objet:=Self->{Self->}
Quelle que soit la syntaxe utilisée, le fonctionnement est identique.
Dans 4D, un onglet est un objet unique avec plusieurs titres (valeurs). C’est un des objets d'interface que l'on peut utiliser pour représenter un tableau.
En général on place les onglets en page 0 du formulaire (reportez-vous au chapitre qui aborde ce point)
Vous le constaterez, les tableaux deviennent vite très utiles voire indispensables dans 4D.
Un tableau ne contient que des éléments de même type (vous ne pouvez pas avoir un tableau avec une ligne Alpha, une autre Date et une troisième Heure). Dans ce cas, vous pouvez utiliser un tableau de pointeurs qui pointera potentiellement vers des variables de types différents.
Comme évoqué à la leçon sur les pointeurs, vous pouvez combiner les pointeurs et les tableaux pour obtenir les "tableaux de pointeurs".
Pensez également qu'une Listbox est une série de tableaux accolés (de même dimension M).
C'est un objet qui regroupe et synchronise de 1 à N tableaux.
Dans une Listbox, vous pouvez paramétrer :
En tout, si votre Listbox comporte N colonnes, vous avez 2N+1 objets (N colonnes, N entêtes, 1 ListBox).
La Listbox permet :
Sachant que la Listbox synchronise ses colonnes, elle prend le plus petit nombre de lignes des tableaux qui la constituent.
Ce point est important car il vous arrivera d’avoir des tableaux remplis et une Listbox vide car un seul des tableaux est vide.
Bonjour,
dans cette vidéo nous allons apprendre à créer et programmer les tableaux ainsi que les objets permettant de les représenter dans les formulaires.
Comme une variable simple, un tableau doit être :
Pour bien comprendre nous allons créer un premier tableau dans le formulaire DETAIL de la table INTERVENTIONS.
Ce tableau concernera les objets
Nous devons donc :
Pour simplifier les manipulations, nous allons mettre l’ensemble de la programmation dans l’objet. Ça nous permettra au passage de réviser la notion d’événement.
$evt:=Evenement formulaire
Au cas ou
:($evt=Sur chargement) //avant l'affichage du formulaire
TABLEAU TEXTE(PopObjets;5) //Définition du tableau (Type, Nom et nombre de lignes)
//remplissage des lignes du tableau
PopObjets{1}:="Formation"
PopObjets{2}:="Logiciel"
PopObjets{3}:="Matériel"
PopObjets{4}:="Réseau"
PopObjets{5}:="Système"
:($evt=Sur clic) //quand l'utilisateur choisit une ligne dans le tableau
Si(PopObjets#0) //si l'utilisateur a choisi une ligne
$LigneChoisie:=PopObjets //on mémorise la ligne choisie
$ValeurChoisie:=PopObjets{$LigneChoisie} //on mémorise la valeur contenue dans cette ligne
[Interventions]Objet:=$ValeurChoisie //on affecte la valeur au champ
Fin de si
Fin de cas
La méthode objet va être composée d'un certain nombre de lignes :
Nous allons tracer le fonctionnement de cette méthode en faisant un 1er test.
On voit lors du double-clic sur une intervention qu'on passe sur chargement.
Nous allons pouvoir afficher le tableau qui contient bien 5 éléments et les 5 éléments sont bien valorisés au fur-et-à-mesure.
L'intervention apparaît.
Lorsqu'on choisit une valeur dans le menu on voit ici le numéro de ligne indiqué dans une variable, qui est une variable qui porte le même nom que le tableau, mais qui est une variable de type entier long
et on voit ici les 6 lignes du tableau, les lignes de 1 à 5 plus la ligne zéro sur laquelle nous reviendrons ultérieurement.
A l'éxécution de cette méthode :
Il est possible de remplacer ces 3 lignes par une seul sous la forme
[Interventions]Objet:=PopObjets{PopObjets}
Pourquoi ?
Car cette valeur ici est la variable entier long qui contenait 3 tout à l'heure, donc qui indique le numéro de ligne du tableau concerné (qui porte le même nom).
Pour des questions génériques, vous trouverez souvent dans les développements ce type d'écriture :
[Interventions]Objet:=Self->{Self->}
Puisque la programmation est effectuée actuellement sur l'objet lui-même self fait référence à l'objet et lorsqu'on on écrit Self->{Self->},
on indique le tableau {à la ligne choisie dans le tableau} et on transfère le contenu directement dans l'objet.
On va tracer ça pour vérifier qu'on obtienne bien le même résultat.
Donc ce découpage permet de bien comprendre en détail.
Cette écriture est l'écriture la plus générique et la plus portable.
Nous allons maintenant créer un nouveau tableau qui permet de saisir la date à plus ou moins 10 jours.
Pour l'initialisation nous le verrons par la suite il s'agit d'un tableau date de 21 lignes : aujourd'hui + 10 jours -10 jours
et on écrira le code le plus condensé de cette manière
Maintenant comment remplir les lignes ? Nous allons faire une boucle dans laquelle on valorise le tableau de cette manière (date du jour + $i-11).
Le tableau bien évidemment portera le bon nom et maintenant on peut tester :
et on voit ici lorsqu'on choisit une valeur dans le tableau, automatiquement elle est reportée à côté sur la date d'intervention.
Maintenant que vous savez programmer les tableaux il est possible dans 4D de les représenter dans différents objets, par exemple dans une listbox.
Une listbox étant un objet composé de une ou plusieurs colonnes avec une entête et une colonne et c'est justement la colonne qui nous intéresse, dans laquelle on va juste écrire le nom du tableau que nous avons géré en mémoire.
Si maintenant nous retournons sur une intervention, la listbox contient bien les différentes valeurs du tableau et on voit la synchronisation directe entre le choix dans la listbox et la correspondance dans le tableau ici.
Nous allons de la même manière programmer la listbox pour que lorsqu'on clique ou lorsqu'on effectue une nouvelle sélection sur cette listbox, automatiquement la valeur de l'objet soit modifiée.
Donc dans la listbox nous cochons les propriétés sur clic et sur nouvelle sélection.
Il y a juste maintenant à recopier cette ligne dans la méthode objet de la listbox :
[Interventions]Objet:=PopObjets{PopObjets}
A l'utilisation lorsqu'on sélectionne une valeur dans la listbox à la souris ou avec les flèches du clavier, automatiquement les valeurs sont transférées.
Il serait bien évidemment possible également de faire du glisser déposer si les zones étaient glissables et déposables.
Produit : 4D
Thème : Tableaux, popup, listbox
Nom intl. : Arrays, pop-ups, list boxes
Autoformation ( 4D v16)