11-21-2013 04:42 AM
Je cherche à étendre la sélection d'une cellule d'une table à une ou plusieurs ligne(s) complètes.
J'utilise SetTableSelection() pour étendre la selection à l'ensemble des cellules de la ou des lignes.
Cela fonctionne si j'étend la sélection vers le bas avec "SHIFT"+"FLECHE BAS" (ou souris cliquée vers le bas), mais vers le haut avec "SHIFT" et "FLECHE-HAUT", la sélection se perd, et il ne reste plus qu'une ligne sélectee.
Il semble que l'appel de SetTableSelection() fait perdre la cellule qui étend la sélection, et la repositionne en bas de la sélection.
Comment faire sans devoir re-coder tout le process de sélection moi-même ?
Ci joint le code de la callback:
int CVICALLBACK ListeProdTableCBk (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
Point ActCell;
Rect range;
switch (event)
{
case EVENT_ACTIVE_CELL_CHANGE: // Cas ou une seule cellule est selectionnée
GetActiveTableCell(panel, control,&ActCell); // Lecture cellule: ligne, colone
RectSet (&range, ActCell.y, 1, 1, VAL_TO_EDGE); // Selectionne tte la ligne: Top,left,height,width
SetTableSelection(panel,control, range); //A activer apres resolution bug sur selection remontante
break;
case EVENT_SELECTION_CHANGE: // Note: Ne marche qu'a partir de 2 cellules selectionnées
GetTableSelection(panel,control, &range); // Lecture selection realisée
range.left=1; range.width=VAL_TO_EDGE; // Etend selection a l'ensemble de la row
SetTableSelection(panel,control, range);
break;
11-27-2013 08:57 AM
Bonjour Eddy,
Afin que nous puissions aider, peut-on connaître le but de l'application ? (contrôler une table dans CVI?)
N'est-il pas possible d'appeler Excel (ou Open Office) en ActiveX pour ainsi bénéficier directement de ces fonctionnalités sans avoir à les recoder ?
Quelle version de CVI est utilisée ?
Dans l'attente d'un retour, la bonne journée.
11-28-2013 10:43 AM
Bonjour,
j'utilise simplement un contrôle de type "Table" qui est inséré dans un panel CVI, le tout dans l'éditeur d'IHM de l'environnement Labwindow/CVI.
Un Active-X Exel ou Open office ne m'apporteraient rien de plus pour ce que je veux faire.
Ce type de contrôle (Table) possède des comportements par défaut qui me conviennent pour la plupart d’entre eux.
Je souhaite simplement modifier le comportement de la sélection avec la souris (ou shift+flèches) qui permet de sélectionner une plage (range) de cellules. En effet, je souhaite forcer la sélection a l'ensemble de la ligne (row) ou des lignes, en étendant la sélection à toutes les colonnes. Je n'ai pas trouvé d'attribut qui permettent de choisir ce comportement.
C'est pour cela que j'ai essayé de changer la sélection en l'élargissant par programmation avec le code ci-dessous:
GetTableSelection(panel,control, &range); // Lecture selection actuelle
range.left=1; range.width=VAL_TO_EDGE; // Etend selection a l'ensemble de la row
SetTableSelection(panel,control, range);
Malheureusement, ce code appelé a chaque modification de la plage de sélection perturbe le système de sélection comme expliqué dans mon post précédent, et empêche également de descendre au-delà de la partie des lignes visibles (plus de scrolling dans la table). Pour le moment, j'ai donc renoncé à faire comprendre à l'utilisateur qu'il sélectionnait toutes les colonnes, même s'il n'en englobe que 1 ou 2 avec le cadre.
J'espère avoir été plus clair.
Cordialement,
Eddy