DCL-04

RADIO_BUTTON


Exemple 4
Boutons Radio


Ah les boutons Radio, pas vraiment des boutons et encore moins de la radio ! de toutes façons les radios n'ont plus de boutons depuis l'avènement des smartphone !
Mais c'est le nom usuel de ces cases circulaires qui s'éteignent quand une autre s'allume de façon à ne laisser qu'un choix possible et un seul.
À ne pas confondre avec les cases à cocher (toggle) le vocabulaire est important.
Une fois le choix effectué un bouton OK validera la case et lancera la routine en fonction de ce choix.

Dans cet exemple je vais expliquer comment créer un ligne de deux boutons radio qui vont lancer une routine ou une autre suivant le choix de l'utilisateur.
Je propose, à titre d'exemple, le dessin d'une ligne ou le dessin d'un cercle, le visuel sera celui-ci :


Le fichier DCL :


Le fichier LSP :


La syntaxe de lancement est (comme précisé dans le commentaire) :
en ligne de commande, taper : Boutons-Radio
La case de dialogue va s'ouvrir, l'utilisateur clique sur le bouton LIGNE ou le bouton CERCLE et la variable Radio1 va s'initialiser avec la valeur renvoyée par cette ligne :

(action_tile "Radio1" "(setq Radio1 $value)")

Il n'y a qu'un simple bouton OK pour validation, il est défini par cette ligne et est un élément de base.dcl :

ok_only;

Ensuite il suffit de faire un (cond) qui va choisir de lancer la routine pour dessiner une ligne ou celle qui va dessiner un cercle.
Dans les images les fichiers LSP ne sont pas apparents mais je le dépose dans le code formaté pour copier-coller ci-après :


Le fichier DCL :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------------------------------------
// Boutons_radio
//---------------------------------------------------------------------------------------------------------
Boutons_radio : dialog {
 key = "Titre";
 label = "";//Title$ from lsp file
 spacer;
 : boxed_radio_row {
 key = "Radio1";
 label = "Choix de dessin";
 width = 40;
 : radio_button {
 key = "L";
 label = "Ligne";
 }
 : radio_button {
 key = "C";
 label = "Cercle";
 }
 }
 spacer;
 ok_only;
}//Boutons_radio

Le fichier LSP (complet) :

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
;----------------------------------------------------------------------------------------------------------
;c:Boutons-radio - Dialogue avec deux boutons radio
;pour choix de dessin Ligne ou Cercle
; Syntaxe: Boutons-radios
;----------------------------------------------------------------------------------------------------------
(defun c:Boutons-radio (/ Dcl_Id Radio1 Return)
 (princ "\n[www.da-code] Boutons Radio \n")(princ)
 (if (not *MyRadios@)
 (setq *MyRadios@ (list nil "" ""))
 );if
 (setq Radio1 (nth 1 *MyRadios@))
 
 (setq Dcl_Id (load_dialog "BoutonsRadio.dcl"))
 (new_dialog "Boutons_radio" Dcl_Id)
 
 (set_tile "Titre" "[www.da-code] Boutons Radio")
 (set_tile "Radio1" Radio1)
 
 (action_tile "Radio1" "(setq Radio1 $value)")
 (setq Return (start_dialog))
 
 (unload_dialog Dcl_Id)
 (setq *MyRadios@ (list nil Radio1))
 
(cond
 ((= Radio1 "L") (ligne-boutonradio))
 ((= Radio1 "C") (cercle-boutonradio))
 )
 
 (princ)
);defun c:Boutons-radio
 
;--------------------------------------------------------------
(defun Ligne-BoutonRadio (/ p1 p2)
 (setq p1 (getpoint "\Point de départ\n")
 p2 (getpoint p1 "\Point d'arrivée\n"))
(entmake (list (cons 0 "LINE") ;*** 
 (cons 10 p1) 
 (cons 11 p2) 
 )
 )
 (princ) 
 );fin de defun c:Ligne-BoutonRadio
;--------------------------------------------------------------------
(defun Cercle-BoutonRadio (/ p1 p2 ray)
 (setq p1 (getpoint "\Centre du cercle\n")
 p2 (getpoint p1 "\Rayon\n")
 ray (distance p1 p2)
 )
 (entmake (list (cons 0 "CIRCLE")
 (cons 10 p1)
 (cons 40 ray)
 )
 )
 (princ)
 );fin du defun c:Cercle-BoutonRadio

Tout va bien ? et comme vous le demande Marcel GOTLIB :


 

Haut de page

Retour à "Exercices DCL"


26 janvier 2018