AYUDA CON VENTANA DE DIALOGO

Ver el tema anterior Ver el tema siguiente Ir abajo

AYUDA CON VENTANA DE DIALOGO

Mensaje por ronaldtroya el Jue Oct 27, 2016 3:57 am

Bueno amigos estoy tratando de hacer un cuadro de dialogo muy básico pero no me funciona a ver si alguien me da una mano y me indica donde esta el erro o que es lo que me esta faltando:

(DEFUN CUADRO()
(setq dclfiletemp (strcat (getenv "TEMP") "\\tempc.dcl"))
(vl-file-delete dclfiletemp)
(setq f (open dclfiletemp "w"))
(write-line
(strcat
"sumador:dialog{
label = \"SUMADOR Datos\";

: edit_box{
label = \"Primer Dato \";
Alignment = right;
Key = \"n1\";
width = 5;
fixed_width = true;
}
: edit_box{
label = \"Segundo Dato \";
Alignment = right;
Key = \"n2\";
width = 5;
fixed_width = true;
}
: edit_box{
label = \"Resultado \";
Alignment = right;
Key = \"n12\";
width = 5;
fixed_width = true;
}
:row{
:button{
label = \"SUMAR\";
Key = \"accept\";
is_default = true;
fixed_width = true;
}
:button{
label = \"CERRAR\";
Key = \"Cancel\";
is_default = true;
fixed_width = true;
}
}
}"
)
f)
(close f)

)

(vl-load-com)
(setq AcadObj (vlax-get-acad-object))
(setq AcadDocument (vla-get-activedocument AcadObj))
(setq mspace (vla-get-modelspace AcadDocument))
(setq util (vla-get-utility AcadDocument))



(DEFUN C:RTP(/)
(vl-load-com)
(CUADRO)

(setq dcl_id(load_dialog dclfiletemp))
(if (not (new_dialog "sumador" dcl_id))
(exit)
)
(set_tile "n1" "2")
(set_tile "n2" "5")

(action_tile "Cancel" "(done_dialog)")
(action_tile "accept" "(sumas)")
(start_dialog)
(unload_dialog dcl_id)
(princ)
)


(defun sumas(/)
(setq VN1 (ATOF (get_tile "n1")))
(setq VN2 (ATOF (get_tile "n2")))
(SETQ VN12 (RTOS (+ VN1 VN2) 2 3))
(set_tile "n12" VN12)
)

Lo que me ocurre es que muestra el cuadro de dialogo pero luego no puedo hacer nada ni cancelar, el cuadro debería de permitirme relizar una simple suma, pero no lo he conseguido, de antemano muchas gracias

ronaldtroya

Mensajes : 23
Fecha de inscripción : 20/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: AYUDA CON VENTANA DE DIALOGO

Mensaje por saulo2016 el Jue Oct 27, 2016 3:34 pm

Hola ronaldtroya.

Mira, basandome en un LISP que me soluciono el buen Maestro Gerado para el calculo de volumenes, te comparto el codigo diseñado por él y modificado por mi.
Ojala y te sirva para comprender donde quedó el error del tuyo.

Código:
(defun c:rtp ( / calcular cierratemp limpia file ret lect valores)

 (setq nfile (vl-filename-mktemp "TMP.dcl") ret 1 file (open nfile "w") )

 (write-line "dd:dialog{
                              :boxed_column{
                          " file)(foreach sub '(("Ingresa Primer Dato" "primero")
 ("Ingresa Segundo Dato " "segundo")

  )
 (write-line (strcat ":row{
                             :edit_box{
                                      label=\"" (car sub) "\";
                                        key=\"k" (cadr sub) "\";
                                      }
                             :button{
                                      label=\"->\";
                                        key=\"kpick"(cadr sub)"\";
                                     }
                                  }") file)
 )
 (write-line "spacer;:text{
                                      label=\"Resultado:\";
                                        key=\"ktxt\";
                                    }
                                  }
                            :row{
                                    " file)
 (foreach sub '(("Calcular" "kref" "}")
                       ("Limpiar" "klimp" "}")
                       ("Salir" "cancel" "is_cancel=true;}}}"))
 (write-line (strcat ":button{
                                      label=\"" (car sub) "\";
                                        key=\"" (cadr sub) "\";
                        
                      " (last sub)) file)
 )
 (close file)
 
;;;*********************************************************************************************************************************************
 (defun calcular ( / primero segundo)
 (if (and (setq primero (distof (get_tile "kprimero")))
 (setq segundo  (distof (get_tile "ksegundo")))

 )
 (set_tile "ktxt" (strcat "Resultado: " (rtos (+ primero segundo) 2 2) " "))
 )
 )
 (defun cierratemp (val)
 (setq valores (mapcar 'get_tile '("kprimero" "ksegundo")))
 (done_dialog val)
 )
 (defun limpia nil
 (set_tile "kprimero" "0.0")
 (set_tile "ksegundo" "0.0")

 (set_tile "ktxt" "Resultado: 0.00  "))
 
 (while (> ret 0)
   (new_dialog "dd" (load_dialog nfile) )
 (if valores
 (progn
 (mapcar 'set_tile '("kprimero" "ksegundo") valores)
 (setq valores nil)
 )
 (limpia)
 )
 (action_tile "kpickprimero" "(cierratemp 2)")
 (action_tile "kpicksegundo"  "(cierratemp 3)")

 (action_tile "kprimero"     "(calcular)")
 (action_tile "ksegundo"      "(calcular)")

 (action_tile "kref"      "(calcular)")
 (action_tile "klimp"     "(limpia)")
 (action_tile "cancel"    "(done_dialog 0)")
 (if (and (> ret 1)(numberp lect))
 (set_tile (nth (- ret 2)'("kprimero" "ksegundo")) (rtos lect 2 2))
 )
 (setq ret (start_dialog))
 (if (> ret 1)
 (setq lect (getdist (strcat "\nIndique  " (nth (- ret 2) '("primer distancia en pantalla" "segunda distancia en pantalla")))))
 )
 )
 (princ)
)


Que estes bien amigo.

Saludos

saulo2016

Mensajes : 84
Fecha de inscripción : 17/03/2016
Edad : 51
Localización : Monterrey, Nuevo León, Mexico

Ver perfil de usuario

Volver arriba Ir abajo

Re: AYUDA CON VENTANA DE DIALOGO

Mensaje por ronaldtroya el Vie Oct 28, 2016 6:55 pm

Muchas Gracias amigo saulo2016
Fue de mucha ayuda, Tu aporte se te agradece por tu gentil atención a mi pregunta.


ronaldtroya

Mensajes : 23
Fecha de inscripción : 20/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: AYUDA CON VENTANA DE DIALOGO

Mensaje por nolo el Vie Oct 28, 2016 7:57 pm

Bueno, la rutina de Gerardo esta muy bien, como siempre, pero repasando la de ronaldtroya veo que el primer error es poner key con mayúsculas porque el dcl distingue mayúsculas y minúsculas.
Después está el is_cancel que es necesario ponerlo si quieres que salga con la tecla escape.
Luego esta lo del done_dialog sin cantidad, yo suelo meter la llamada al dcl dentro de un bucle que se repite mientras el done_dialogo que se asigna desde el acction_tile y se recoge en start_dialog, no sea un valor para salir.

Así lo haría yo:
Código:
(DEFUN C:RTP(/ cuadro sumas vn1 vn2 vn12 old r )
(vl-load-com)
(setq r 2 vn1 "0.0"vn2 vn1 vn12 vn1)
(setq old (getvar "dimzin"))
(setvar "dimzin" 0)


(DEFUN CUADRO()
(setq dclfiletemp (strcat (getenv "TEMP") "\\tempc.dcl"))
(vl-file-delete dclfiletemp)
(setq f (open dclfiletemp "w"))

(write-line(strcat
"sumador:dialog{label = \"SUMADOR Datos\";
: edit_box{label = \"Primer Dato \";Alignment = right;key = \"n1\";width = 5;fixed_width = true;}
: edit_box{label = \"Segundo Dato \";Alignment = right;key = \"n2\";width = 5;fixed_width = true;}
: edit_box{label = \"Resultado \";Alignment = right;key = \"n12\";width = 5;fixed_width = true;}
:row{
:button{label = \"SUMAR\";key = \"accept\";is_default = true;fixed_width = true;}
:button{label = \"CERRAR\";Key = \"Cancel\";is_cancel = true;fixed_width = true;}
}
}")f)
(close f)

)

(defun sumas(/)
(setq VN1  (get_tile "n1"))
(setq VN2 (get_tile "n2"))
(SETQ VN12 (RTOS (+ (ATOF VN1)(ATOF VN2)) 2 3))
)

(CUADRO)

(while (> r 0) ;;; comienzo bucle
(setq dcl_id(load_dialog dclfiletemp))
(if (not (new_dialog "sumador" dcl_id))
 (exit)
)
(set_tile "n1" vn1)
(set_tile "n2" vn2)
(set_tile "n12" VN12)

(action_tile "Cancel" "(done_dialog 0)")
(action_tile "accept" "(sumas)(done_dialog 2)")
(setq r (start_dialog))

(if (zerop  r)
 (unload_dialog dcl_id)
)
);; final bucle
(setvar "dimzin" old)
(princ)
)

Lo del dimzin es para que no pierda los ceros de los decimales a la derecha en el rtos ya que si dimzin es 8 los pierde


Un saludo

nolo

Mensajes : 95
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: AYUDA CON VENTANA DE DIALOGO

Mensaje por Contenido patrocinado Hoy a las 11:00 pm


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.