AfraLisp Blog

The AutoLisp/Visual Lisp/VBA Resource Website

AfraLisp Blog

Home Newsletter Utter Rubbish Coding Tips AutoCAD Tips Contact Downloads WAUN

Page I. Page II. Home. Page IV.

Dialogue Boxes - Step by Step - Page III.

Let us now add an Edit Box and a slider so that the user can enter the size of the slot, if a slotted hole is chosen.
Note that the Edit Box and Slider only become active if the slotted bolt radio button is selected.

Sample 6

The DCL coding : 
samp6 : dialog {				//dialog name
      label = "Structural Holes" ;		//give it a label

       : row {					//define row

       :boxed_radio_column {			//define radio column
       label = "Type" ;				//give it a label

        : radio_button {			//define radion button
     	  key = "rb1" ;				//give it a name
     	  label = "Bolt Holes &Site" ;		//give it a label
     	  value = "1" ;				//switch it on
        }					//end definition

     	: radio_button {			//define radio button
     	  key = "rb2" ;				//give it a name
     	  label = "Bolt Holes Sho&p" ;		//give it a label
     	}					//end definition

     	: radio_button {			//define radio button
     	  key = "rb3" ;				//give it a name
     	  label = "Bolt Holes &Hidden" ;	//give it a label
     	  }					//end definition

     	: radio_button {			//define radio button
     	  key = "rb4" ;				//give it a name
     	  label = "Bolt Holes &Ctsnk" ;		//give it a label
     	}					//end definition

     	: radio_button {			//define radio button
     	  key = "rb5" ;				//give it a name
     	  label = "Bolt Holes &Elevation" ;	//give it a label
     	  }					//end definition

     	: radio_button {			//define radion button
     	  key = "rb6" ;				//give it a name
     	  label = "Bolt Holes &Slotted" ;	//give it a label
     	}					//end definition

        }					//end radio column

        : boxed_column {			//define boxed column
        label = "&Size";			//give it a label

     	: popup_list {				//define popup list
        key = "selections";			//give it a name
        value = "5" ;				//initial value
        }					//end list

       }					//end boxed column

       }					//end row

       : edit_box {				//*define edit box
         key = "eb1" ;				//*give it a name
         label = "Slot &Length (O/All Slot)" ;	//*give it a label
         edit_width = 6 ;			//*6 characters only
        }					//*end edit box

        : slider {				//*defin slider
        key = "myslider" ;			//*give it a name
        max_value = 100;			//*upper value
        min_value = 0;				//*lower value
        value = "50";				//*initial value
        }					//*end slider

     ok_cancel ;				//predifined OK/Cancel

     : row {					//define row

     : image {					//define image tile
     key = "im" ;				//give it a name
     height = 1.0 ;				//and a height
     width = 1.0 ;				//and now a width
     }						//end image

     : paragraph {				//define paragraph

     : text_part {				//define text
     label = "Designed and Created";		//give it some text
     }						//end text

     : text_part {				//define more text
     label = "by Kenny Ramage";			//some more text
     }						//end text

     }						//end paragraph

     }						//end row
					
     }						//end dialog

And now the AutoLISP coding : 
(defun C:samp6 ()					;define function	

  (setq lngth 50.0)					;*preset slot length

  (setq hole "site")					;preset hole type

  (setq siz "M20")					;preset hole size

  (setq NAMES '("M6" "M8" "M10" "M12"
                "M16" "M20" "M24" "M30")		;define list
  );setq

  (setq dcl_id (load_dialog "samp6.dcl"))		;load dialog

  (if (not (new_dialog "samp6" dcl_id)			;test for dialog

      );not

    (exit)						;exit if no dialog

  );if

  (setq w (dimx_tile "im")				;get image tile width
        h (dimy_tile "im")				;get image tile height

);setq

  (start_image "im")					;start the image
  (fill_image 0 0 w h 5)				;fill it with blue
  (end_image)						;end image

  (start_list "selections")				;start the list box
  (mapcar 'add_list NAMES)				;fill the list box
  (end_list)						;end list

  (set_tile "eb1" "50")					;*put data into edit box
  (mode_tile "eb1" 1)					;*disable edit box
  (mode_tile "myslider" 1)				;*disable slider

  (action_tile "myslider"				;*if user moves slider
	 "(slider_action $value $reason)")		;*pass arguments to slider_action

  (action_tile "eb1" 					;*is user enters slot length
	 "(ebox_action $value $reason)")		;*pass arguments to ebox_action

  (defun slider_action (val why)			;*define function
      (if (or (= why 2) (= why 1))			;*check values
      (set_tile "eb1" val)))				;*update edit box

  (defun ebox_action (val why)				;*define function
      (if (or (= why 2) (= why 1))			;*check values
      (set_tile "myslider" val)))			;*update slider

  (action_tile "rb1" "(setq hole \"site\")")		;store hole type
  (action_tile "rb2" "(setq hole \"shop\")")		;store hole type
  (action_tile "rb3" "(setq hole \"hid\")")		;store hole type
  (action_tile "rb4" "(setq hole \"ctsk\")")		;store hole type
  (action_tile "rb5" "(setq hole \"elev\")")		;store hole type
  (action_tile "rb6" "(setq hole \"slot\")		;store hole type
                      (mode_tile \"eb1\" 0)		;*enable edit box
                      (mode_tile \"myslider\" 0)	;*enable slider
                      (mode_tile \"eb1\" 2)")		;*switch focus to edit box

    (action_tile
    "cancel"						;if cancel button pressed
    "(done_dialog) (setq userclick nil)"		;close dialog, set flag
    );action_tile

  (action_tile
    "accept"						;if O.K. pressed
    (strcat						;string 'em together
      "(progn 
       (setq SIZ (atof (get_tile \"selections\")))"	;get list selection
      "(setq lngth (atof (get_tile \"eb1\")))"		;*get slot length
      " (done_dialog)(setq userclick T))"		;close dialog, set flag
    );strcat
  );action tile

  (start_dialog)					;start dialog

  (unload_dialog dcl_id)				;unload

   (if userclick					;check O.K. was selected
    (progn

      (setq SIZ (fix SIZ))				;convert to integer
      (setq SIZ (nth SIZ NAMES))			;get the size

    );progn

  );if userclick

(princ)

);defun C:samp

(princ)

Now, for the fun of it, let's add some toggles :

Sample 7

Here is the DCL coding : 
samp7 : dialog {				//dialog name
      label = "Structural Holes" ;		//give it a label

       : row {					//define row

       :boxed_radio_column {			//define radio column
       label = "Type" ;				//give it a label

        : radio_button {			//define radion button
     	  key = "rb1" ;				//give it a name
     	  label = "Bolt Holes &Site" ;		//give it a label
     	  value = "1" ;				//switch it on
        }					//end definition

     	: radio_button {			//define radio button
     	  key = "rb2" ;				//give it a name
     	  label = "Bolt Holes Sho&p" ;		//give it a label
     	}					//end definition

     	: radio_button {			//define radio button
     	  key = "rb3" ;				//give it a name
     	  label = "Bolt Holes &Hidden" ;	//give it a label
     	  }					//end definition

     	: radio_button {			//define radio button
     	  key = "rb4" ;				//give it a name
     	  label = "Bolt Holes &Ctsnk" ;		//give it a label
     	}					//end definition

     	: radio_button {			//define radio button
     	  key = "rb5" ;				//give it a name
     	  label = "Bolt Holes &Elevation" ;	//give it a label
     	  }					//end definition

     	: radio_button {			//define radion button
     	  key = "rb6" ;				//give it a name
     	  label = "Bolt Holes &Slotted" ;	//give it a label
     	}					//end definition

        }					//end radio column

        : boxed_column {			//define boxed column
        label = "&Size";			//give it a label

     	: popup_list {				//define popup list
        key = "selections";			//give it a name
        value = "5" ;				//initial value
        }					//end list

       }					//end boxed column

       }					//end row

       : edit_box {				//define edit box
         key = "eb1" ;				//give it a name
         label = "Slot &Length (O/All Slot)" ;	//give it a label
         edit_width = 6 ;			//6 characters only
        }					//end edit box

        : slider {				//defin slider
        key = "myslider" ;			//give it a name
        max_value = 100;			//upper value
        min_value = 0;				//lower value
        value = "50";				//initial value
        }					//end slider

        :boxed_row {				//*define boxed row

        :toggle {				//*define toggle
        key = "tog1";				//*give it a name
        label = "Ortho On/Off";			//*give it a label
        }					//*end toggle

        :toggle {				//*define toggle
        key = "tog2";				//*give it a name
        label = "Snap On/Off";			//*give it a label
        }					//*end definition

        }					//*end boxed row

     ok_cancel ;				//predifined OK/Cancel

     : row {					//define row

     : image {					//define image tile
     key = "im" ;				//give it a name
     height = 1.0 ;				//and a height
     width = 1.0 ;				//and now a width
     }						//end image

     : paragraph {				//define paragraph

     : text_part {				//define text
     label = "Designed and Created";		//give it some text
     }						//end text

     : text_part {				//define more text
     label = "by Kenny Ramage";			//some more text
     }						//end text

     }						//end paragraph

     }						//end row
					
     }						//end dialog

And now the AutoLISP coding : 
(defun C:samp7 ()					;define function	

  (setq lngth 50.0)					;preset slot length

  (setq hole "site")					;preset hole type

  (setq siz "M20")					;preset hole size

  (setq NAMES '("M6" "M8" "M10" "M12"
                "M16" "M20" "M24" "M30")		;define list
  );setq

  (setq dcl_id (load_dialog "samp7.dcl"))		;load dialog

  (if (not (new_dialog "samp7" dcl_id)			;test for dialog

      );not

    (exit)						;exit if no dialog

  );if

  (setq w (dimx_tile "im")				;get image tile width
        h (dimy_tile "im")				;get image tile height

);setq

  (start_image "im")					;start the image
  (fill_image 0 0 w h 5)				;fill it with blue
  (end_image)						;end image

  (start_list "selections")				;start the list box
  (mapcar 'add_list NAMES)				;fill the list box
  (end_list)						;end list

  (set_tile "eb1" "50")					;put dat into edit box
  (mode_tile "eb1" 1)					;disable edit box
  (mode_tile "myslider" 1)				;disable slider

  (setq orth (itoa (getvar "orthomode")))		;*get orthomode value
  (set_tile "tog1" orth)				;*switch toggle on or off

  (setq sna (itoa (getvar "snapmode")))			;*get snap value
  (set_tile "tog2" sna)					;*switch toggle on or off

  (action_tile "myslider"				;if user moves slider
	 "(slider_action $value $reason)")		;pass arguments to slider_action

  (action_tile "eb1" 					;is user enters slot length
	 "(ebox_action $value $reason)")		;pass arguments to ebox_action

  (defun slider_action (val why)			;define function
      (if (or (= why 2) (= why 1))			;check values
      (set_tile "eb1" val)))				;update edit box

  (defun ebox_action (val why)				;define function
      (if (or (= why 2) (= why 1))			;check values
      (set_tile "myslider" val)))			;update slider

  (action_tile "tog1" "(setq orth $value)")		;*get ortho toggle value
  (action_tile "tog2" "(setq sna $value)")		;*get snap toggle value

  (action_tile "rb1" "(setq hole \"site\")")		;store hole type
  (action_tile "rb2" "(setq hole \"shop\")")		;store hole type
  (action_tile "rb3" "(setq hole \"hid\")")		;store hole type
  (action_tile "rb4" "(setq hole \"ctsk\")")		;store hole type
  (action_tile "rb5" "(setq hole \"elev\")")		;store hole type
  (action_tile "rb6" "(setq hole \"slot\")		;store hole type
                      (mode_tile \"eb1\" 0)		;enable edit box
                      (mode_tile \"myslider\" 0)	;enable slider
                      (mode_tile \"eb1\" 2)")		;switch focus to edit box

    (action_tile
    "cancel"						;if cancel button pressed
    "(done_dialog) (setq userclick nil)"		;close dialog, set flag
    );action_tile

  (action_tile
    "accept"						;if O.K. pressed
    (strcat						;string 'em together
      "(progn 
       (setq SIZ (atof (get_tile \"selections\")))"	;get list selection
      "(setq lngth (atof (get_tile \"eb1\")))"		;get slot length
      "(setvar \"orthomode\" (atoi orth))"		;*ortho on/off
      "(setvar \"snapmode\" (atoi sna))"		;*snap on/off
      " (done_dialog)(setq userclick T))"		;close dialog, set flag
    );strcat
  );action tile

  (start_dialog)					;start dialog

  (unload_dialog dcl_id)				;unload

   (if userclick					;check O.K. was selected
    (progn

      (setq SIZ (fix SIZ))				;convert to integer
      (setq SIZ (nth SIZ NAMES))			;get the size

    );progn

  );if userclick

(princ)

);defun C:samp

(princ)
Page I. Page II. Home. Page IV.
 
The AutoLisp/Visual Lisp/VBA Resource Website

Copyright 1999-Perpetuity by AfraLisp

All rights reserved.
Information in this document is subject to change without notice.
Site created and maintained by Kenny Ramage

The AutoLisp/Visual Lisp/VBA Resource Website