03-05-2009 01:58 AM
Bonjour,
je suis un peu embetté, car je me bat avec un fichier .h !
En fait, j'ai une fenetre de sélection qui me permet de scanner un code barre et de valider l'objet par la suite...
J'ai donc plusieurs boutons, objets, décorations etc...
Ceux ci se présentent de cette manière :
#define P_x 1 /* callback function: Panelx */
#define P_x_DOSSIER 2
#define P_x_UNITE 3
#define P_x_CP 4
#define P_x_TYPE 5
#define P_x_DATE_IN 6
#define P_x_DATE_PASSAGE 7
#define P_x_CHARG_PARAM 8 /* callback function: Chargement_parametres */
#define P_x_PASS 9 /* callback function: Force */
#define P_x_EXIT 10 /* callback function: Exit */
#define P_x_DECORATION 11
#define P_x_TEXTMSG_2 12 /* callback function: Appel_Password */
#define P_x_TEXTMSG 13
#define P_x_COMMANDBUTTON 14 /* callback function: Help */
#define P_x_PICTURE_2 15
#define P_x_PICTURE 16
#define P_x_VALIDATION 17 /* callback function: Validation */
/* Menu Bars, Menus, and Menu Items: */
/* (no menu bars in the resource file) */
/* Callback Prototypes: */
int CVICALLBACK Appel_Password(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK Chargement_parametres(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK Exit(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK Force(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK Help(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK Panelx(int panel, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK Validation(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
Donc quand je scanne la boite avec la douchette, il arrive qu'un bouton se déclenche. Cependant, ce n'est pas le bouton VALIDATION, ce qui m'embette !
C'est le bouton Chargement paramètres, déclaré au début des appels de fonction dans les define.
Donc, quand je le met dans cette ordre là, le bouton Validation est bien sélectionné par défault (encadré par un rectangle noir), puisque je pense il est au début des #define...
Quand mon bouton Validation est grisé, il passe au suivant (Force), ce qui est tout à fait ce que je souhaite !
#define P_x 1 /* callback function: Panelx */
#define P_x_DOSSIER 2
#define P_x_UNITE 3
#define P_x_CP 4
#define P_x_TYPE 5
#define P_x_DATE_IN 6
#define P_x_DATE_PASSAGE 7
#define P_x_VALIDATION 8 /* callback function: Validation */
#define P_x_PASS 9 /* callback function: Force */
#define P_x_CHARG_PARAM 10 /* callback function: Chargement_parametres */
#define P_x_EXIT 11 /* callback function: Exit */
#define P_x_DECORATION 12
#define P_x_TEXTMSG_2 13 /* callback function: Appel_Password */
#define P_x_TEXTMSG 14
#define P_x_COMMANDBUTTON 15 /* callback function: Help */
#define P_x_PICTURE_2 16
#define P_x_PICTURE 17
Cependant, lorsque je grise ou pas un bouton, par la suite, ce n'est pas le bon bouton qui est affectée, puisque j'ai modifié l'ordre et il n'apprécie guère...
Ex: je demande de grisé le bouton Validation et c'est le bouton Chargement_Paramètres qui est grisé 😞
Donc avez vous une solution à ca ou pouvez vous m'aider ??
Merci beaucoup
Rémi
Solved! Go to Solution.
03-05-2009 04:40 AM
03-05-2009 07:16 AM
est-ce que par hasard la "douchette" du lecteur code-barre serait connectée sur le port PS2 du PC ? dans ce cas, la douchette se comporte comme un clavier: la lecture du code-barre génère une séquence de caractère comme si celle-ci avait été tapée sur le clavier. si malheureusement la douchette génère les caractères TAB ou ENTER, alors cela agit directement sur l'interface de l'application qui a le focus.
je pense que simplement changer le "tab order" des contrôles dans le panel règlerait le problème. pour modifier le tab order d'un panneau, il faut ouvrir le fichier UIR dans CVI, puis utiliser le menu "Edit/Tab order...". il faut alors mettre les contrôles dans l'ordre (en cliquant simplement dessus) de facon à ce que le bouton Validation soit juste après le dernier contrôle qui recoit les données et avant le bouton Chargement Paramètre.
03-05-2009 09:17 AM
Voila dummy_decoy !
C'est ce menu que je cherchait....
Merci beaucoup 🙂
Et oui, en fait, mon code barre fait 8 caractères et le 9ème serait le "retour chariot", fait automatiquement par la douchette... et valide le bouton sélectionné.
Grace à ce menu, je peux changer l'ordre des boutons...
07-22-2010 07:47 AM
Salut à tous!
Ma question se rapporte exactement à ce topic.Donc bien qu'il date d'un certain temps, je la place quand même ici...
Y a-t-il un moyen de faire en sorte que
#define PANEL
soit différent de 1?
J'ai modifié les controls de l'interface en utilisant le tab-order mais le contôle que j'avais paramétré à '0' est égal à '2' dans le fichier .h.
#define PANEL 1
#define PANEL_LED_1 2
#define PANEL_LED_2 3
#define PANEL_LED_3 4
#define PANEL_LED_4 5
Cela ne pose pas de problème dans mon code mais c'est juste par curiosité...
Merci d'avance pour votre réponse.
07-22-2010 11:53 PM
What you are observing now is a special case which can lead to some misunderstandment. To fully comprehend CVI internal logic you can simply create a UIR file with more than one panel inside and examine the corresponding #include file. What you will see will be the following:
#define PANEL1 1
#define PANEL_CONTROL1 2
#define PANEL_CONTROL2 3
#define PANEL2 2
#define PANEL_CONTROL1 2
#define PANEL_CONTROL2 3
and so on. That is: panel IDs are unique inside the UIR file and progressively numbered; control IDs are unique within the owner panel and progressively numbered.
What CVI does when you address a control with for example SetCtrlVal (panelHandle, controlID, ...) is to translate this instruction into: "address control with index <controlID> into panel identified by <panelHandle> variable". This permits on one side to load more than one panel in memori at the same time but also to load the same panel more than once, each time identifying it with the corresponding handle (wich is guaranteed unique by the OS).
Regarding the first control in a panel being identified by number 2 I cannot say anything: it depends on an internal logic in CVI and you cannot alter it, but it's indeed transparent to us and as you already noted it's prefectly working.