Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Quelle option est cochée ? | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Quelle option est cochée ? Dim 19 Fév 2017 - 13:33 | |
| Lorsqu'on a un CONTAINER_OPTION avec toute une liste d'options, ou lorsqu'on a simplement une série d'options dans une form, ou lorsqu'on a une série de lignes de menus qui sont susceptibles d'être cochées, une question se pose: quelle(s) est(sont) la(les) objets cochées ?
Actuellement, il faut utiliser la fonction CHECKED() sur chaque objet pour savoir s'il est coché ou non. C'est très fastidieux en cas de larges possibliltées.
Il serait intéressant d'avoir une nouvelle fonction pour les OPTION_CONTAINER: CHECKED_OPTIONS(N) avec N étant le numéro d'un objet CONTAINER_OPTION. La fonction retournerait le numéro de l'objet de type OPTION qui est cochée dans l'objet N, ou zéro si aucune option n'est cochée.
De façon analogue, il serait intéressant de savois quelle(s) ligne(s) de menu est(sont) cochée(s). Je propose donc une commande pouvant retourner des valeurs multiples (la liste des lignes de menu cochées dans un menu), selon le modèle suivant: CHECKED_MENU N,D avec N étant le numéro d'un MAIN_MENU ou SUB_MENU et D étant le numéro d'un objet DLIST. La commande remplirait la DLIST par les numéros des lignes cochées de type SUB_MENU à l'intérieur de l'objet N, ou effacerait simplement l'objet D si aucune ligne n'est cochée.
Dernière édition par Klaus le Lun 20 Fév 2017 - 9:55, édité 1 fois | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Quelle option est cochée ? Dim 19 Fév 2017 - 23:26 | |
| Pour 'option', essaye avec la variable système 'NUMBER_CLICK', ça marche: - Code:
-
label affichage
dim i for i=1 to 5 option i : caption i,"test" : top i,i*20 on_click i,affichage next i
end affichage: caption 0,str$(number_click) return Le clavier est également pris en compte. Par contre, je n'ai pas testé pour les menu. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelle option est cochée ? Dim 19 Fév 2017 - 23:47 | |
| Je sais bien, Silverman ! Le problème n'est pas de détecter l'option ou le menu, coché au moment où on le coche.
Mon problème est le suivant: j'utilise les options et les lignes des menus pour définir des paramètres de configuration. Imagine un programme de transmission de données par ligne série V24 (je sais, cela semble ancien, mais c'est le principe qui compte). Or, dans ce contexte, il faut configurer plusieurs options: - vitesse (75, 150, 300, 1200, 2400, 4800, 9600, 19200, 38400 bauds) - nombre de bits de données (7 ou 8 bits) - parité (aucune, pair ou impaire) - contrôle de ligne (CTS/RTS, DTS/DTR, etc)
On configure toutes ce options au départ, possiblement par le chargement d'un fichier de configuration (profil). Et c'est plus tard, au moment de l'exécution, que je veux connaître la vitesse configurée. Faut-il alors parcourir toutes les options du contaner_option contenant les options de vitesse, pour savoir laquelle est cochée ? J'aimerais, avec une seule fonction, récupérer le numéro du seul objet OPTION du CONTAINER_OPTION concerné, qui est cochée. Tu vois la différence et l'utilité de la fonction que le propose ?
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 1:08 | |
| En ce qui concerne l'objet OPTION coché dans un OPTION_CONTAINER, je peux trouver le hande dans KGF.dll, par un petit code Delphi: - Code:
-
var cwlist: TStringList;
function WindowEnumProc(hwnd:HWnd;lParam:LPARAM):boolean; stdcall; var ClassName: array [0..255] of char; begin FillChar(ClassName, SizeOf(ClassName), #0); GetClassName(hwnd, ClassName, SizeOf(ClassName) -1); if String(ClassName)='TRadioButton' then begin if SendMEssage(hwnd,BM_GETCHECK,0,0)=BST_CHECKED then cwlist.Add(inttostr(hwnd)); end; result := true; end;
function GetCheckedOptionHandle(hnd: HWND):integer; stdcall; export; var s: string; begin result := 0; cwlist := TStringList.Create; EnumChildWindows(hnd,@WindowEnumProc,0); s := '000'+cwlist.Text; result := StrToInt(LeftStr(s,length(s)-2)); cwlist.Free; end;
La fonction GetCheckedOptionHandle retourne le handle de l'option cochée dans le CONTAINER_OPTION dont on a passé le handle en paramètre, ou zéro si aucune option n'est cochée. Mais ça ne résoud pas mon problème - il faut toujours parcourir la liste des objets pour trouver à quel objet correspond le handle retourné. Non - je veux vraiment avoir ne numéro d'objet de l'OPTION cochée dans le OPTION_CONTAINER, et idem pour le numéro d'objet du SUB_MENU coché en passant le handle du MAIN_MENU ou du SUB_MENU supérieur en paramètre. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 3:13 | |
| Le code suivant ne peut pas faire l'affaire ? - Code:
-
dim i container_option 10 : height 10,400 for i = 20 to 200 step 10 option i : parent i,10 top i,10+(i-20)*2 : left i,10 : caption i,"option " + str$(i) next i mark_on 20*int(rnd(10)+1) : ' On coche une option au hasard ' on cherche quelle option est cochée for i = 20 to 200 step 10 if checked(i) > 0 message "L'option " + str$(i) + " est cochée" exit_for end_if next i
Une boucle FOR / NEXT n'est pas si pénalisante du point de vue performance. L'unique objection concerne le numérotage des objets : ils doivent porter des numéros en progression arithmétique ce qui est toujours possible de réaliser. Mais, tu as peut-être une autre idée derrière la tête. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 9:54 | |
| Oui, Papydall, c'est bien ainsi que je le réalise en ce moment. Mais je trouve ça lourd de répéter cette technique à différents endroits du programme, pour und dizaine de séries d'options indépendantes. Et c'est encore plus contraignant pour les lignes cochées des menus, car il peut y en avoir plusieurs, pas forcément contigues, dans un menu.
J'ai d'ailleurs modifié mon post initial au siujet des menus pour suggérer, non pas une fonction, mais plutôt une commande à deux paramètres. Cela me semble plus dans la logique de Panoramic. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 11:37 | |
| @klaus Ok, je n'avais pas bien saisie. Pour que cette nouvelle fonction 'checked_option(N)' fonctionne, if faudrait que le bug du 'container_option' soit réglé(l'évènement 'on_click' n'est plus détecté) à mon avis. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 13:14 | |
| Pour moi, on_click sur des options marche. Regarde: - Code:
-
label clic container_option 1 option 2 : parent 2,1 :caption 2,"aaa" : top 2,10 : left 2,10 : on_click 2,clic option 3 : parent 3,1 :caption 3,"bbb" : top 3,30 : left 3,10 : on_click 3,clic option 4 : parent 4,1 :caption 4,"ccc" : top 4,50 : left 4,10 : on_click 4,clic end
clic: message "clic sur option "+str$(number_click) return
Je ne rencontre aucun problème avec ça... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 14:30 | |
| Oui Klaus, le ON_CLICK sur OPTION marche, mais Silvermann a parlé du ON_CLICK sur CONTAINER_OPTION qui lui n'est pas pris en compte. D’ailleurs il ne déclenche rien ni erreur ni Ok - Code:
-
label clic container_option 10 : on_click 10,clic end clic: message "Ce S/P n'est jamais exécuté" return
Par contre le click sur un CONTAINER est pris en charge. - Code:
-
label clic dim i container 1 : on_click 1,clic option 2 : parent 2,1 :caption 2,"2" : top 2,10 : left 2,10 option 3 : parent 3,1 :caption 3,"3" : top 3,30 : left 3,10 option 4 : parent 4,1 :caption 4,"4" : top 4,50 : left 4,10 mark_on 3 end
clic: for i = 2 to 4 if checked(i) > 0 message "L'option " + str$(i) + " est cochée" exit_for end_if next i if i > 4 then message "Aucune option n'est cochée !" return
"REMer" puis "déREMer" la ligne 7. Cliquer dans le container, en dehors des options. | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 16:17 | |
| @Klaus Voici un exécutable sans éditeur qui contient la fonction CHECKED_OPTION() *** lien inactivé *** et voici un petit exemple de mise en oeuvre: - Code:
-
label affiche container_option 10 caption 10,"J'ai 4 OPTIONs" option 50:parent 50,10:top 50,20:left 50,20:caption 50,"Option 50" option 60:parent 60,10:top 60,40:left 60,20:caption 60,"Option 60" option 65:parent 65,10:top 65,60:left 65,20:caption 65,"Option 65" option 70:parent 70,10:top 70,80:left 70,20:caption 70,"Option 70" on_click 50,affiche on_click 60,affiche on_click 65,affiche on_click 70,affiche end affiche: caption 0,str$(checked_option(10)) return La fonction renvoie le numéro d' OPTION sélectionné et -1 si rien n'est sélectionné. _________________ username : panoramic@jack-panoramic password : panoramic123
Dernière édition par Jack le Jeu 23 Fév 2017 - 12:13, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelle option est cochée ? Lun 20 Fév 2017 - 18:07 | |
| Merci, Jack ! Pour la fonction CHECKED_OPTION, c'est exactement ça. Super. En fait, j'ai remanié un peu le source proposé en enlevant les ON_CLICK sur les options, mais en ajoutant un bouton qui fait le test. Et ça marche exactement comme je l'imaginais. J'ai également ajouté dans ce petit code un menu avec 2 lignes cochées, ainsi que la commande CHECKED_MENU selon ma suggestion, en documentant le résultat attendu (mis en commentaire pour le moment, bien sûr). Voici ce que ça donne: - Code:
-
label affiche main_menu 1 sub_menu 2 : parent 2,1 : caption 2,"Paramètres" sub_menu 3 : parent 3,2 : caption 3,"aaaaaaa" sub_menu 4 : parent 4,2 : caption 4,"bbbbbbbbb" sub_menu 5 : parent 5,2 : caption 5,"ccccccccccc" sub_menu 6 : parent 6,2 : caption 6,"dddddddddd" mark_on 4 mark_on 5 dlist 99
container_option 10 caption 10,"J'ai 4 OPTIONs" option 50:parent 50,10:top 50,20:left 50,20:caption 50,"Option 50" option 60:parent 60,10:top 60,40:left 60,20:caption 60,"Option 60" option 65:parent 65,10:top 65,60:left 65,20:caption 65,"Option 65" option 70:parent 70,10:top 70,80:left 70,20:caption 70,"Option 70" button 20 : left 20,300 : caption 20,"Tester" : on_click 20,affiche end affiche: caption 0,str$(checked_option(10)) ' checked_menu 2,99 : ' <======= nouvelle commande suggérée ' ici, on devrait avoir 2 lignes dans la DLIST: ' 4 ' 5 return Je te suis très reconnaissant de l'intérêt que tu portes à ma suggestion, et j'espère en voir le bout du nez dans une prochaine version de Panoramic ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Mar 21 Fév 2017 - 1:33 | |
| Très intéressant tout çà. Bon, ben la 28i1 pour... demain... non ?.. | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Quelle option est cochée ? Jeu 23 Fév 2017 - 12:22 | |
| @Klaus Voici un exécutable sans éditeur qui contient: - la fonction CHECKED_OPTION() - la commande CHECKED_MENU http://panoramic-language.pagesperso-orange.fr/Reference/Executable/PANORAMIC.zipCHECKED_OPTION(N) : retourne le numéro d'objet de l'OPTION sélectionnée dans le CONTAINER_OPTION numéro N CHECKED_MENU N,D : remplit le DLIST numéro D avec les numéros des SUB_MENU sélectionnés dans l'objet numéro N CHECKED_MENU se limite aux SUB_MENUs fils de l'objet numéro N. Les arborescences de sous-menus ne sont pas traitées. Attention, la fonction OBJECT_PARENT() est remplacée par PARENT()
et voici un petit exemple de mise en oeuvre de CHECKED_MENU: - Code:
-
dim i% main_menu 1 sub_menu 2 : parent 2,1 : caption 2,"Paramètres" sub_menu 3 : parent 3,2 : caption 3,"aaaaaaa" sub_menu 4 : parent 4,2 : caption 4,"bbbbbbbbb" sub_menu 5 : parent 5,2 : caption 5,"ccccccccccc" sub_menu 6 : parent 6,2 : caption 6,"dddddddddd" mark_on 4 mark_on 5 dlist 99 checked_menu 2,99 if count(99)<>0 for i%=1 to count(99):print item_read$(99,i%):next i% end_if _________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelle option est cochée ? Jeu 23 Fév 2017 - 12:48 | |
| Jack, la définition est exactement ce que je souhaitais. Seulement voilà: le code suivant: - Code:
-
label affiche dim i% main_menu 1 sub_menu 2 : parent 2,1 : caption 2,"Paramètres" sub_menu 3 : parent 3,2 : caption 3,"aaaaaaa" sub_menu 4 : parent 4,2 : caption 4,"bbbbbbbbb" sub_menu 5 : parent 5,2 : caption 5,"ccccccccccc" sub_menu 6 : parent 6,2 : caption 6,"dddddddddd" mark_on 4 mark_on 5 dlist 99 list 100 : left 100,200 : top 100,40
container_option 10 caption 10,"J'ai 4 OPTIONs" option 50:parent 50,10:top 50,20:left 50,20:caption 50,"Option 50" option 60:parent 60,10:top 60,40:left 60,20:caption 60,"Option 60" option 65:parent 65,10:top 65,60:left 65,20:caption 65,"Option 65" option 70:parent 70,10:top 70,80:left 70,20:caption 70,"Option 70" button 20 : left 20,300 : caption 20,"Tester" : on_click 20,affiche end affiche: caption 0,str$(checked_option(10)) checked_menu 2,99 : ' <======= nouvelle commande suggérée ' ici, on devrait avoir 2 lignes dans la DLIST: ' 4 ' 5 if count(99)>0 clear 100 for i%=1 to count(99) item_add 100,item_read$(99,i%) next i% end_if return produit malheureusement Il a dû y avoir une confusion dans les fichiers Panoramic.exe... | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Quelle option est cochée ? Jeu 23 Fév 2017 - 13:12 | |
| Non, il n'y a pas eu confusion.
Ton exemple fonctionne parfaitement avec PANORAMIC.zip du lien.
Je viens de télécharger et d'exécuter. Tout est correct.
_________________ username : panoramic@jack-panoramic password : panoramic123 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelle option est cochée ? Jeu 23 Fév 2017 - 13:22 | |
| YES !!! Désolé, c'est moi qui ai mélangé des versions de Panoramic.exe !
C'est effectivement exactement ce que le proposais. Ce serait super de trouver cela dans une future version, officielle ou intermédiaire. Tu as limité CHECKED_MENU aus sous-menus directement dépendants de l'objet passé en paramètre, sans chercher dans les sous-menus. C'est exactement l'effet voulu, et je suis très reconnaissant pour cette réalisation ! | |
| | | Contenu sponsorisé
| Sujet: Re: Quelle option est cochée ? | |
| |
| | | | Quelle option est cochée ? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |