4D v16Tableaux, popup, listbox |
||||||||||||||||||||||||||||||||||||
|
4D v16
Tableaux, popup, listbox
Tableaux, popup, listbox
En complément des manipulations expliquées dans la vidéo, il faut noter que : Les tableaux font partie des incontournables de 4D. Pratiques, sans limite, dynamiques, à 1 ou 2 dimensions, ils sont un espace en mémoire qui peut s’afficher sur les formulaires par l’intermédiaire d’objets (popup, combo box, listbox, zones de défilement...).
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} qu’on peut décrypter comme ceci : "Objet := contenu du tableau {à la ligne choisie}" Vous trouverez également, plus concise et beaucoup plus générique, cette syntaxe qui utilise la commande Self (pointeur vers l’objet dont la méthode est en cours d’exécution) : [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. 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, 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.
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:=Form event 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. 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). [Interventions]Objet:=Self->{Self->} qui utilise un pointeur vers l'objet. 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.
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 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. 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.
|
PROPRIÉTÉS
Produit : 4D
HISTORIQUE
UTILISATION DE L'ARTICLE
Autoformation ( 4D v16) |
||||||||||||||||||||||||||||||||||