Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
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 |
OBJECT MOVE | X | |||
OBJECT GET COORDINATES | X | X | X | X |
OBJECT SET RESIZING OPTIONS | X | |||
OBJECT GET RESIZING OPTIONS | X | |||
OBJECT SET FILTER | X | |||
OBJECT SET FORMAT | X | X | ||
OBJECT SET ENTERABLE | X | |||
OBJECT SET LIST BY NAME | X | |||
OBJECT SET TITLE | X | |||
_o_OBJECT SET COLOR | X | X | X | X |
OBJECT SET RGB COLORS | X | X | X | X |
OBJECT SET FONT | X | X | X | X |
OBJECT SET FONT SIZE | X | X | X | X |
OBJECT SET FONT STYLE | X | X | X | X |
OBJECT SET HORIZONTAL ALIGNMENT | X | X | X | X |
OBJECT Get horizontal alignment | X | X | X | X |
OBJECT SET VERTICAL ALIGNMENT | X | X | X | X |
OBJECT Get vertical alignment | X | X | X | X |
OBJECT SET VISIBLE | X | X | X | X |
OBJECT SET SCROLLBAR | 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 GET ARRAYS.
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 OBJECT SET 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 OBJECT SET 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 OBJECT SET 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 OBJECT Get pointer utilisée avec la constante Object with focus ou Object current (anciennement fonctions Focus object 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 |
On Clicked | list box | colonne |
On Double Clicked | list box | colonne |
On Before Keystroke | colonne | colonne |
On After Keystroke | colonne | colonne |
On After Edit | colonne | colonne |
On Getting Focus | colonne ou list box (*) | colonne ou list box (*) |
On Losing Focus | colonne ou list box (*) | colonne ou list box (*) |
On Drop | list box source | list box (*) |
On Drag Over | list box source | list box (*) |
On Begin Drag Over | list box | list box (*) |
On Mouse Enter | list box (**) | list box (**) |
On Mouse Move | list box (**) | list box (**) |
On Mouse Leave | list box (**) | list box (**) |
On Data Change | colonne | colonne |
On Selection Change | list box (**) | list box (**) |
On Before Data Entry | colonne | colonne |
On Column Moved | list box | colonne |
On Row Moved | list box | list box |
On Column Resize | list box | colonne |
On Open Detail | Nil | list box (**) |
On Close Detail | Nil | list box (**) |
On Header Click | list box | en-tête |
On Footer Click | list box | pied |
On After Sort | 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, OBJECT Get pointer 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:=OBJECT Get pointer(Object with focus)
` $Colonne contient un pointeur vers col2
$Ligne:=$Colonne-> `$Ligne vaut 5
Dans le cadre d'une list box de type sélection, OBJECT Get pointer retourne :
Il est possible d’utiliser la commande OBJECT SET SCROLL POSITION (thème “Objets (Formulaires)”) 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 EDIT ITEM (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 REDRAW (thème "Interface utilisateur") provoque la mise à jour des données affichées dans la list box.
Note : La commande REDRAW n'est pas prise en charge avec les list box de type entity selection.
La commande Displayed line number (thème “Sélections”) fonctionne dans le contexte de l'événement On Display Detail 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 Form event code.
La gestion du glisser-déposer de données dans les list box est prise en charge par les commandes Drop position et _o_DRAG AND DROP PROPERTIES. 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 MOVED ROW NUMBER et LISTBOX MOVED COLUMN NUMBER.
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 :
Case of
:(FORM Event=On Before Data Entry) // une cellule prend le focus
LISTBOX GET CELL POSITION(*;"lb";$col;$row)
// identification de la cellule
If(tDate{$row}<Current date) // si la date est antérieure à aujourd’hui
$0:=-1 // la cellule n’est PAS saisissable
Else
... // la cellule est saisissable
End if
End case
Note : A compter de 4D v13, l’événement On Before Data Entry est retourné avant On Getting 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 SORT COLUMNS et/ou en combinant les événements formulaire On Header Click et On After Sort (cf. commande Form event code) et les commandes 4D de gestion des tableaux.
Note : La propriété “Triable” concerne uniquement le tri utilisateur standard, la commande LISTBOX SORT COLUMNS 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 selon que la list box de type tableau, sélection d'enregistrements, ou collection/entity selection.
ARRAY BOOLEAN(tBListBox;10)
// tBListBox est le nom de la variable associée à la List box dans le formulaire
If(tBListBox{1}=True)
tBListBox{1}:=False
Else
tBListBox{1}:=True
End if
Si vous avez coché l'option Cacher surlignage sélection pour une list box, vous devrez gérer la visibilité des sélections dans la list box à l'aide des options d'interface disponibles. Pour plus d'informations sur ce point, veuillez vous reporter ci-dessous au paragraphe Personnaliser la représentation des sélections.
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 Print object (les formulaires projet et les formulaires table sont pris en charge). La commande LISTBOX GET PRINT INFORMATION permet de contrôler l’impression de l’objet.
Dans ce mode :
Vous disposez de plusieurs possibilités pour définir des couleurs de fond, des couleurs de police et des styles de police dans les list box :
Des principes de priorité et d'héritage sont observés.
Lorsqu’une même propriété de style ou de couleur est définie à plusieurs niveaux, l’ordre de priorité suivant est appliqué :
priorité élevée | Cellule (si texte multistyle) |
Tableaux/Méthodes colonne | |
Tableaux/Méthodes list box | |
Propriétés de colonne | |
priorité basse | Propriétés de list box |
Par exemple, si vous définissez un style de caractères dans les propriétés de la list box et un autre via un tableau de styles pour la colonne, ce dernier sera pris en compte.
Soit une list box dont les lignes ont une couleur alternée gris/gris clair, définies dans les propriétés de la list box. Un tableau de couleur de fond a également été défini pour la list box afin de passer en orange clair les lignes dont au moins une valeur est négative :
<>_BgndColors{$i}:=0x00FFD0B0 // orange
<>_BgndColors{$i}:=lk inherited // valeur défaut
Vous souhaitez désormais afficher en fond orange foncé les cellule ayant une valeur négative. Pour cela, vous définissez un tableau de couleur de fond pour chaque colonne, par exemple <>_BgndColor_1, <>_BgndColor_2 et <>_BgndColor_3. Les valeurs de ces tableaux seront prioritaires sur celles définies dans les propriétés de la list box et celles du tableau global de couleur de fond :
<>_BgndColorsCol_3{2}:=0x00FF8000 // orange foncé
<>_BgndColorsCol_2{5}:=0x00FF8000
<>_BgndColorsCol_1{9}:=0x00FF8000
<>_BgndColorsCol_1{16}:=0x00FF8000
Vous pouvez obtenir le même résultat à l’aide des commandes LISTBOX SET ROW FONT STYLE et LISTBOX SET ROW COLOR. Elles ont pour avantage d’éviter de devoir prédéfinir les tableaux de style/couleur des colonnes : ils sont créés dynamiquement par les commandes.
Pour chaque attribut (style, couleur et couleur de fond), un héritage est mis en oeuvre lorsque la valeur par défaut est utilisée :
Ainsi, si vous souhaitez qu’un objet hérite de la valeur d’attribut du niveau supérieur, il vous suffit de passer lk inherited (valeur par défaut) à la commande de définition ou directement dans l’élément de tableau de style/couleur correspondant.
Soit une list box contenant un style de caractère standard et des couleurs alternées :
Vous effectuez les modifications suivantes :
Pour restaurer l’apparence initiale de la list box, il suffit de :
Des propriétés d'interface "masquée", "désactivée" et "sélectionnable" sont configurables pour chaque ligne de list box de type tableau.
Ces fonctionnalités sont gérées via le tableau de propriétés Tableau de contrôle des lignes, que vous pouvez désigner à l'aide de la commande LISTBOX SET ARRAY ou via la Liste des propriétés :
Le tableau de contrôle des lignes doit être de type Entier long et comporter le même nombre de lignes que la list box. Pour plus d'informations, reportez-vous à la section Propriétés spécifiques des List box.
Chaque élément du Tableau de contrôle des lignes définit le statut d'interface de la ligne correspondante dans la list box. Trois propriétés d'interface sont accessibles via les constantes du thème "List Box" :
Constante | Type | Valeur | Comment |
lk row is disabled | Entier long | 2 | La ligne correspondante est désactivée. Les textes et les contrôles tels que les cases à cocher sont grisés ou estompés. Les zones de texte ne sont plus saisissables. Par défaut : activée |
lk row is hidden | Entier long | 1 | La ligne correspondante est masquée. Masquer des lignes affecte uniquement l’affichage de la list box. Les lignes masquées sont toujours présentes dans les tableaux et peuvent être manipulées par programmation. Les commandes du langage, notamment LISTBOX Get number of rows ou LISTBOX GET CELL POSITION, ne tiennent pas compte de l’état masqué/affiché des lignes. Par exemple, dans une list box contenant 10 lignes et dont les 9 premières sont masquées, LISTBOX Get number of rows retournera 10. Du point de vue de l’utilisateur, la présence de lignes masquées dans une list box n’est pas décelable visuellement. Seules les lignes visibles sont sélectionnables (par exemple via la commande Tout sélectionner). Par défaut : visible |
lk row is not selectable | Entier long | 4 | La ligne correspondante n'est pas sélectionnable (le surlignage n'est plus possible). Les zones de texte ne sont plus saisissables à moins que l'option "Saisie sur clic unique" soit active. Les contrôles tels que les cases à cocher et les pop ups restent toutefois fonctionnels. Ce paramétrage est ignoré si le mode de sélection de la list box est "Aucun". Par défaut : sélectionnable |
Pour modifier le statut d'une ligne, il vous suffit de passer la ou les constante(s) appropriée(s) dans l'élément correspondant. Par exemple, si vous souhaitez que la ligne n°10 ne soit pas sélectionnable, vous pouvez écrire :
aLControlArr{10}:=lk row is not selectable
Vous pouvez définir plusieurs propriétés d'interface en un seul appel :
aLControlArr{8}:=lk row is not selectable+lk row is disabled
A noter que la définition d'une propriété pour un élément écrase toutes les autres valeurs définies pour cet élément (si elles n'ont pas été réinitialisées). Par exemple :
aLControlArr{6}:=lk row is disabled+lk row is not selectable //la ligne 6 est désactivée et non sélectionnable
aLControlArr{6}:=lk row is disabled //la ligne 6 est toujours désactivée mais redevient sélectionnable
Si vous cochez l'option Cacher surlignage sélection (cf. section Thème Apparence), vous devez gérer la représentation visuelle des sélections dans la list box à l'aide des options d'interface disponibles. Comme les sélections elles-mêmes sont gérées par 4D, cela signifie que :
Vous pouvez alors définir par programmation des couleurs d'arrière-plan, des couleurs ou des styles de polices spécifiques permettant de visualiser l'apparence des lignes sélectionnées. Pour cela, vous pouvez utiliser des tableaux ou des expressions en fonction du type de list box affiché (cf. sections suivantes).
Note : Utilisez la constante lk inherited pour appliquer l'apparence courante de la list box (couleur d'arrière-plan, style de police, etc.). Pour plus d'informations sur le fonctionnement de la constante lk inherited, reportez-vous au paragraphe Héritage.
Pour déterminer quelles lignes sont sélectionnées, vous devez tester si elles sont incluses dans l'ensemble désigné par la propriété Ensemble surlignage de la list box :
Vous pouvez alors personnaliser l'apparence des lignes sélectionnées à l'aide des expressions suivantes, définies dans la Liste des propriétés :
Note : N'oubliez pas que les expressions sont automatiquement réévaluées à chaque fois que :
Les lignes de rupture ne peuvent pas être surlignées lorsque l'option Cacher surlignage sélection est cochée. Comme il n'est pas possible d'avoir des couleurs distinctes pour les en-têtes de même niveau, il n'y a aucun moyen de surligner une ligne de rupture spécifique par programmation.
Pour déterminer quelles lignes sont sélectionnées, vous devez parcourir le tableau booléen associé à la list box.
Vous pouvez alors personnaliser l'apparence des lignes sélectionnées à l'aide des tableaux suivants, définis dans la Liste des propriétés :
Notez que les tableaux de list box utilisés pour définir l'apparence des lignes sélectionnées doivent être recalculés dans l'événement formulaire On Selection Change ; cependant, vous pouvez également modifier ces tableaux dans les événements formulaire suivants :
... en fonction du moment et de la manière dont vous souhaitez représenter visuellement le changement de focus des sélections.
Vous avez choisi de cacher le surlignage système et souhaitez représenter les sélections dans la list box à l'aide d'une couleur de fond verte, comme dans cet exemple :
Avec une list box de type tableau, vous devez ajouter mettre à jour le Tableau couleurs de fond par programmation :
Dans la méthode objet de la list box, vous pouvez écrire :
Case of
:(FORM Event=On Selection Change)
$n:=Size of array(LB_Arrays)
ARRAY LONGINT(_ListboxBackground;$n) //couleur de fond des lignes
For($i;1;$n)
If(LB_Arrays{$i}=True) // ligne sélectionnée
_ListboxBackground{$i}:=0x0080C080 // fond vert
Else // ligne non sélectionnée
_ListboxBackground{$i}:=lk inherited
End if
End for
End case
Avec une list box de type sélection, pour produire le même effet vous pouvez utiliser une méthode chargée de mettre à jour la propriété Expression couleur de fond basée sur l'ensemble désigné par la propriété Ensemble surlignage. Par exemple :
Dans la méthode UI_SetColor, vous pouvez écrire :
If(Is in set("$ListboxSet"))
$color:=0x0080C080 // fond vert
Else
$color:=lk inherited
End if
$0:=$color
Attention : N'oubliez pas de cocher l'option Cacher surlignage sélection afin de désactiver le surlignage système (voir ci-dessus).
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 :
Begin SQL
SELECT * FROM PERSONS INTO <<vlistbox>>
End SQL
Customize Highlight Color (4D blog)
Download HDI database
Tutoriaux sur les list box
Produit : 4D
Thème : List Box
Modifié : 4D v15 R4
Modifié : 4D v16 R2
Modifié : 4D v17
4D - Langage ( 4D v20 R7)