4D v13.4Gestion programmée des objets de type List box |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
Gestion programmée des objets de type List box
|
Commandes Propriétés des objets | Objet | Colonne | En-tête de colonne | Pied de colonne |
OBJET DEPLACER | X | |||
OBJET LIRE COORDONNEES | X | |||
OBJET FIXER REDIMENSIONNEMENT | X | |||
OBJET LIRE REDIMENSIONNEMENT | X | |||
OBJET FIXER FILTRE SAISIE | X | |||
OBJET FIXER FORMATAGE | X | X | ||
OBJET FIXER SAISISSABLE | X | |||
OBJET FIXER NOM ENUMERATION | X | |||
OBJET FIXER TITRE | X | |||
OBJET FIXER COULEUR | X | X | X | X |
OBJET FIXER COULEURS RVB | X | X | X | X |
OBJET FIXER POLICE | X | X | X | X |
OBJET FIXER TAILLE POLICE | X | X | X | X |
OBJET FIXER STYLE POLICE | X | X | X | X |
OBJET FIXER ALIGNEMENT HORIZONTAL | X | X | X | X |
OBJET Lire alignement horizontal | X | X | X | X |
OBJET FIXER ALIGNEMENT VERTICAL | X | X | X | X |
OBJET Lire alignement vertical | X | X | X | X |
OBJET FIXER VISIBLE | X | X | X | X |
OBJET FIXER BARRES DEFILEMENT | X | |||
OBJET LIRE TAILLE OPTIMALE | X | X | X | X |
Note : Avec les List box de type tableau, il est possible de définir séparément les propriétés de style, de couleur de police, de couleur de fond et de visibilité de chaque ligne. Cette gestion s'effectue via des tableaux associés à la list box dans la Liste des propriétés. Vous pouvez récupérer par programmation le nom de ces tableaux à l'aide de la commande LISTBOX LIRE TABLEAUX.
Il est possible d’associer une méthode à l’objet List box dans son ensemble et/ou à chaque colonne de la list box. Les méthodes objet sont appelées dans l’ordre suivant :
1. Méthode objet de la colonne
2. Méthode objet de la list box
La méthode objet de la colonne reçoit les événements se produisant dans son en-tête et dans son pied.
Lorsque la commande OBJET FIXER VISIBLE est utilisée avec un en-tête ou un pied de list box, elle agit sur tous les en-têtes ou tous les pieds de l’objet List box, quel que soit l’élément individuel spécifié par la commande. Par exemple, l’instruction OBJET FIXER VISIBLE(*;"entête3";Faux) masquera tous les en-têtes de l’objet List box auquel appartient l’en-tête 3 (et non uniquement cet en-tête).
A noter que, pour que vous puissiez gérer la visibilité de ces objets à l'aide de la commande OBJET FIXER VISIBLE, ils doivent avoir été affichés dans la list box au niveau de l'éditeur de formulaires (l'option Afficher en-têtes et/ou Afficher pieds doit être cochée pour l'objet).
La fonction OBJET Lire pointeur utilisée avec la constante Objet avec focus ou Objet courant (anciennement fonctions Objet focus et Self) peut être utilisée dans la méthode objet d’une list box ou d'une colonne de list box. Elle retourne un pointeur vers la list box, la colonne de list box (1) ou la variable d'en-tête en fonction du type d'événement formulaire. Le tableau suivant détaille ce fonctionnement :
Evénement | Objet avec focus | Objet courant |
Sur clic | list box | colonne |
Sur double clic | list box | colonne |
Sur avant frappe clavier | colonne | colonne |
Sur après frappe clavier | colonne | colonne |
Sur après modification | colonne | colonne |
Sur gain focus | colonne ou list box (*) | colonne ou list box (*) |
Sur perte focus | colonne ou list box (*) | colonne ou list box (*) |
Sur déposer | list box source | list box (*) |
Sur glisser | list box source | list box (*) |
Sur début glisser | list box | list box (*) |
Sur début survol | list box (**) | list box (**) |
Sur survol | list box (**) | list box (**) |
Sur fin survol | list box (**) | list box (**) |
Sur données modifiées | colonne | colonne |
Sur nouvelle sélection | list box (**) | list box (**) |
Sur avant saisie | colonne | colonne |
Sur déplacement colonne | list box | colonne |
Sur déplacement ligne | list box | list box |
Sur redimensionnement colonne | list box | colonne |
Sur clic entête | list box | en-tête |
Sur clic pied | list box | pied |
Sur après tri | list box | en-tête |
(*) Lorsque le focus est modifié à l'intérieur d'une list box, un pointeur vers la colonne est retourné. Lorsque le focus est modifié au niveau global du formulaire, un pointeur vers la list box est retourné. Dans le contexte d'une méthode objet de colonne, un pointeur vers la colonne est retourné.
(**) Non exécuté dans le contexte d'une méthode objet de colonne.
(1) Lorsqu'un pointeur vers la colonne est retourné, l'objet pointé dépend du type de la list box. Dans le cadre d'une list box de type tableau, OBJET Lire pointeur retourne un pointeur vers le tableau. Le mécanisme des pointeurs de 4D permet alors de connaître le numéro de l’élément de tableau modifié. Par exemple, en supposant que l’utilisateur a modifié la 5e ligne de la colonne col2 :
$Colonne:=OBJET Lire pointeur(Objet avec focus)
` $Colonne contient un pointeur vers col2
$Ligne:=$Colonne-> `$Ligne vaut 5
Dans le cadre d'une list box de type sélection, OBJET Lire pointeur retourne :
Il est possible d’utiliser la commande OBJET FIXER DEFILEMENT (thème “Propriétés des objets”) avec un objet de type list box. Cette commande permet de faire défiler les lignes de la list box afin d’afficher la première ligne sélectionnée ou une ligne spécifique.
La commande EDITER ELEMENT (thème “Gestion de la saisie”) permet de passer en mode édition une cellule d’un objet list box.
Lorsqu'elle est appliquée à une list box en mode sélection, la commande REDESSINER (thème "Interface utilisateur") provoque la mise à jour des données affichées dans la list box.
La commande Numero de ligne affichee (thème “Sélections”) fonctionne dans le contexte de l'événement Sur affichage corps pour un objet list box.
Des événements formulaire spécifiques sont destinés à la gestion programmée des list box, concernant notamment le glisser-déposer et le tri. Pour plus d’informations, reportez-vous à la description de la commande Evenement formulaire.
La gestion du glisser-déposer de données dans les list box est prise en charge par les commandes Position deposer et PROPRIETES GLISSER DEPOSER. Ces commandes ont été spécialement adaptées pour les list box.
Attention de ne pas confondre le glisser-déposer avec le déplacement de lignes et de colonnes, pris en charge par les commandes LISTBOX NUMERO LIGNE DEPLACEE et LISTBOX NUMERO COLONNE DEPLACEE.
Pour qu’une cellule de list box soit saisissable, quel que soit son type (tableau et sélection), il est nécessaire que les deux conditions suivantes soient réunies :
Imaginons par exemple une list box contenant deux tableaux, de type date et texte. Le tableau date n’est pas saisissable. Le tableau texte est saisissable si la date n’est pas déjà passée.
Voici la méthode de la colonne tText :
Au cas ou
:(Evenement formulaire=Sur avant saisie) // une cellule prend le focus
LISTBOX LIRE POSITION CELLULE(*;"lb";$col;$row)
// identification de la cellule
Si(tDate{$row}<Date du jour) // si la date est antérieure à aujourd’hui
$0:=-1 // la cellule n’est PAS saisissable
Sinon
... // la cellule est saisissable
Fin de si
Fin de cas
Note : A compter de 4D v13, l’événement Sur avant saisie est retourné avant Sur gain focus.
Par défaut, la list box gère automatiquement les tris standard des colonnes en cas de clic sur l’en-tête. Un tri standard est un tri alphanumérique des valeurs de la colonne, alternativement croissant / décroissant lors de clics multiples. Toutes les colonnes sont toujours automatiquement synchronisées.
Il est possible d’interdire le tri utilisateur standard en désélectionnant la propriété “Triable” pour la list box.
Le développeur peut mettre en place une gestion personnalisée des tris à l'aide de la commande LISTBOX TRIER COLONNES et/ou en combinant les événements formulaire Sur clic entête et Sur après tri (cf. commande Evénement formulaire) et les commandes 4D de gestion des tableaux.
Note : La propriété “Triable” concerne uniquement le tri utilisateur standard, la commande LISTBOX TRIER COLONNES ne tient pas compte de cette propriété.
En outre, la valeur de la variable associée à l’en-tête d’une colonne permet de gérer une information supplémentaire : le tri courant de la colonne (lecture) et l’affichage de la flèche de tri.
Il est possible de fixer la valeur de la variable (par exemple Header2:=2) afin de “forcer” l’affichage de la flèche de tri. Le tri de la colonne lui-même n’est dans ce cas pas modifié, il appartient au développeur de le gérer.
La gestion des sélections s'effectue différemment pour les list box de type tableau et de type sélection.
Note : La commande Compter dans tableau est utile dans ce cas pour connaître le nombre de lignes sélectionnées.
Par exemple, cette méthode permet d’inverser la sélection de la première ligne de la list box (type tableau) :
TABLEAU BOOLEEN(tBListBox;10)
` tBListBox est le nom de la variable associée à la List box dans le formulaire
Si(tBListBox{1}=Vrai)
tBListBox{1}:=Faux
Sinon
tBListBox{1}:=Vrai
Fin de si
Note : Les spécificités de la gestion des sélections dans les list box en mode hiérarchique sont détaillées dans la section Gestion des List box hiérarchiques.
Il est possible d’imprimer des list box à compter de 4D v12. Deux modes d’impression sont proposés : le mode prévisualisation, permettant d’imprimer une list box comme un objet de formulaire et le mode avancé, permettant de contrôler l’impression de l’objet list box lui-même au sein du formulaire. A noter que l'apparence "Impression" est proposée pour les list box dans l'éditeur de formulaires.
L’impression d’une list box en mode prévisualisation consiste à imprimer directement la list box avec le formulaire qui la contient via les commandes d’impression standard ou la commande de menu Imprimer. La list box est imprimée dans l’état où elle se trouve dans le formulaire. Ce mode ne permet pas de contrôler précisément l’impression de l’objet ; en particulier, il ne permet pas d’imprimer toutes les lignes d’une list box contenant plus de lignes qu’elle ne peut en afficher.
Dans ce mode, l’impression des list box s’effectue par programmation, via la commande Imprimer objet. Par conséquent, seules des list box présentes dans des formulaires projet peuvent être imprimées en mode avancé. La commande LISTBOX LIRE INFORMATION IMPRESSION permet de contrôler l’impression de l’objet.
Dans ce mode :
Il est possible de placer directement le résultat d’une requête SQL dans une list box de type tableau. Cette fonction offre un moyen rapide de visualiser le résultat des requêtes SQL. Seules les requêtes de type SELECT peuvent être utilisées. Ce mécanisme n’est pas utilisable avec une base SQL externe.
Les principes de mise en oeuvre sont les suivants :
Exemple
Nous voulons récupérer tous les champs de la table PERSONS et placer leur contenu dans la list box dont le nom de variable est vlistbox. Dans la méthode objet d’un bouton (par exemple), il suffit d’écrire :
Debut SQL
SELECT * FROM PERSONS INTO <<vlistbox>>
Fin SQL
Produit : 4D
Thème : List Box
Nom intl. : Managing List Box Objects
Gestion des List box hiérarchiques