4D v16.3Gestion programmée des objets de type List box |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Gestion programmée des objets de type List box
Gestion programmée des objets de type List box
Les commandes de ce thème sont dédiées à la gestion programmée des objets de formulaire de type List box. Un objet de type List box est entièrement paramétrable dans l’éditeur de formulaires de 4D et peut également être contrôlé par programmation. Pour plus d’informations sur la création et le paramétrage des objets de type List box dans l'éditeur de formulaires ainsi que leur utilisation, reportez-vous au manuel Mode Développement de la documentation de 4D. Un objet List box peut contenir une ou plusieurs colonnes et peut être associé soit à des tableaux 4D, soit à une sélection d'enregistrements. Dans le cas des list box de type sélection, les colonnes sont associées à des champs ou des expressions. Dans ce type de list box, chaque colonne est associée à un tableau 4D à une dimension ; tous les types de tableaux peuvent être utilisés, à l’exception des tableaux de pointeurs. Le format d’affichage de chaque colonne peut être défini dans l’éditeur de formulaires ou via la commande OBJECT SET FORMAT. En mode programmé, les valeurs des colonnes (saisie et affichage) sont gérées à l’aide des commandes de haut niveau du thème List box (telles que LISTBOX INSERT ROWS ou LISTBOX INSERT COLUMN) ainsi que des commandes de manipulation des tableaux. ARRAY TEXT(NomColonne;taille) Vous pouvez également utiliser une énumération : LIST TO ARRAY("NomEnum";NomColonne) Attention : Lorsqu’un objet List box contient plusieurs colonnes de tailles différentes, seul le nombre d’éléments correspondant au plus petit tableau est affiché. Il est donc conseillé de veiller à ce que chaque tableau ait le même nombre d’éléments que les autres. A noter également que si une colonne de la list box est “vide” (c'est le cas lorsque le tableau associé n'a pas été déclaré ou dimensionné via le langage), la list box n'affiche aucun contenu. Dans ce type de list box, chaque colonne peut être associée à un champ ou à une expression. Le contenu de chaque ligne est alors évalué en fonction d'une sélection d'enregistrements : la sélection courante d'une table ou une sélection temporaire. Un objet List box est composé de quatre types d’éléments distincts :
Dans l’éditeur de formulaires, ces éléments peuvent être sélectionnés séparément. Chacun d’eux dispose de son propre nom d’objet et nom de variable et peut donc être adressé séparément. Par défaut, les colonnes sont nommées Colonne1 à n, les en-têtes Entête1 à n et les pieds Pied1 à n dans le formulaire, indépendamment des objets List box eux-mêmes. A noter que, par défaut, le même nom est utilisé pour les objets et leurs variables associées, à l'exception des pieds (par défaut les variables sont vides pour les pieds, 4D utilise des variables dynamiques).
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 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). 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 :
(*) 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é. (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) 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. 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. La gestion du glisser-déposer de données dans les list box est prise en charge par les commandes Drop position et DRAG AND DROP PROPERTIES. Ces commandes ont été spécialement adaptées pour les list box. 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 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. 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) 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 pour les list box de type tableau et de type sélection.
Note : La commande Count in array 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) : ARRAY BOOLEAN(tBListBox;10) 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é :
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 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é 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" :
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 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 Begin SQL
Voir aussi
|
PROPRIÉTÉS
Produit : 4D
HISTORIQUE
Modifié : 4D v15 R4 UTILISATION DE L'ARTICLE
4D - Langage ( 4D v16) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||