LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Modifier l'ordre des #define dans le .h pour sélectionner un bouton par défaut

Solved!
Go to solution

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

0 Kudos
Message 1 of 6
(4,232 Views)
Le fichier .h est auto-generé qd on change qq chose dans l'interface
utilisateur.
Il ne faut donc pas y toucher.
Je ne vois pas en quoi l'ordre des declarations a une importance.
Quelle est la question ?

--
Guillaume Dargaud
http://www.gdargaud.net/

"matmay" <x@no.email> a écrit dans le message de news:
1236240613186-865025@exchange.ni.com...
> Bonjour,&nbsp;je suis un peu embett&eacute;, car je me bat avec un fichier
> .h !En fait, j'ai une fenetre de s&eacute;lection qui me permet de scanner
> un code barre et de valider l'objet par la suite...J'ai donc plusieurs
> boutons, objets, d&eacute;corations etc...&nbsp;Ceux ci se
> pr&eacute;sentent de cette mani&egrave;re :&nbsp;#define&nbsp; P_x
> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
> 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* callback function: Panelx */
> #define&nbsp;
> P_x_DOSSIER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
> 2
[...]


0 Kudos
Message 2 of 6
(4,227 Views)
Solution
Accepted by matmay

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.


 

Message 3 of 6
(4,219 Views)

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...

0 Kudos
Message 4 of 6
(4,209 Views)

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.

0 Kudos
Message 5 of 6
(3,764 Views)

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.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Message 6 of 6
(3,740 Views)