Asignar código a Botones de Clase

Hola Carlos! Cumpliendo con tus orientaciones anteriores, ahora te consulto: ¿Cómo asignar el código a los botones de la clase que he creado? Cree la clase que me orientastes sin ningún inconveniente!

1 respuesta

Respuesta
1
Enhorabuena !
Ahora vamos a tener que trabajar con la clase Form y la Clase Commandgroup a la vez.
¿Vas comprendiendo lo que estamos haciendo?
A primera hora de la tarde comenzamos.
Hola! :D ! Si! Ahora, paso a paso, voy teniendo mejor noción de lo que me has orientado! Ok! Hasta la tarde entonces! Saludos!
Según lo que hemos venido conversando, dijimos que tenemos que tratar de estandarizar nuestro código de manera que se fácil mantenerlo. Además nos ahorramos muchas líneas de programación.
En tu proyecto debes tener un programa "principal", que es el que aparece en negrita dentro de la pestaña Código del Administrador de Proyectos. En ese programa debes agregar al inicio la definición de una variable pública que será la que almacenará el nombre del formulario que debe ejecutarse en cada caso.
* codigo inicio programa principal *
public p_form_name && tú puedes utilizar el nombre de variable que mas te guste.
* código final del programa principal *
* este código debes ponerlo luego del comando "read events" es decir que se ejecutará cuando estés saliendo del sistema, lo mas al final que puedas.
release p_form_name
ó
release all
Ahora vamos a asignar el código al botón Nuevo de tu COMMANDGROUP
En el evento click del botón NUEVO copia y pega este código:
IF (THISFORM.VALIDFILE())=1
    DO FORM ALLTRIM(p_form_name)
Endif
Ahora va la explicación:
El IF llama a un método definido en la clase miform, que se llama validfile. Ese método verifica si hay algún nombre de archivo .scx especificado para la variable pública p_form_name. Dicho de otro modo, verifica si se ha especificado algún formulario para su ejecución.
No es un trabalenguas, es más sencillo de lo que te imaginas y al final lo comprenderás todo, como en esas películas de misterio. Tú sigue las indicaciones !
Una vez hecho esto vas a abrir para editar la clase miform que tú definiste y vas a buscar en la barra de menú (de arriba) el menú Clase. Dale clic a la opción nuevo método. Se abrirá una ventana en la que se te pedirá el nombre del método, allí debes poner VALIDFILE, dejas la visibilidad en público y luego le das click a Agregar.
Luego das doble clic sobre tu clase form para que se abra el editor de código, en el control procedimiento busca y selecciona VALIDFILE.
Finalmente copia y pega este código dentro del editor de código del procedimiento VALIDFILE de tu clase form.
*---------------------------------------------------------------*
*  Llamado desde la clase _Comdgroup
*
*  Verifica si hay algún nombre de archivo(.scx) especificado
*
*  DEVUELVE VALORES NUMERICOS:
*    0 -- No hay ningún archivo especificado
*    1 -- Si hay un archivo especificado
*---------------------------------------------------------------*
THISFORM.MOUSEPOINTER= 11
#INCLUDE EBM.H
LOCAL V_FILENAME
IF EMPTY(P_FORM_NAME)
    V_FILENAME=0
    =MESSAGEBOX (_DISABLE, _MBXFRMT, _MBXTIT)
    ELSE
    V_FILENAME=1
ENDIF
THISFORM.MOUSEPOINTER= 0
RETURN V_FILENAME
Realiza estos paso y cuando termines me avisas para que prosigamos dentro de la misma pregunta. Si tienes dudas o comentarios me avisas.
En lo que te acabo de pasar seguramente hay algunas cosas nuevas y que no entiendes.
Vamos a tratar de verlas de a una.
**************
#INCLUDE EBM.H
**************
A medida que vayas desarrollando tu sistema necesitarás ir devolviendo algunos mensajes a los usuarios ante determinadas situaciones. Puedes programar esos mensajes en cada lugar en que lo necesites, con lo que repetirás muchas definiciones en varios formularios, o puedes ser más precavido y definir todos los mensajes en un archivo de texto con extensión H.
Es mi caso he llamado a mi archivo al igual que mi sistema, tú puedes darle el nombre que más te guste.
Vamos a crear este archivo en tu proyecto:
Selecciona la pestaña Otros desde el Administrador de Proyectos, luego selecciona Archivos de Texto, y luego das click en Nuevo.. Se abrirá el editor de código al que estás habituado.
Allí copiarás este código:
*******************
#DEFINE _MBXTIT            "Nombre de tu Sistema - Mensaje del Sistema:"
#DEFINE _MBXFRMT        0+48+0        && Aceptar + Exclamación + 1º boton.
#DEFINE _DISABLE        "Este comando no se encuentra Habilitado. Disculpe las molestias."
Luego vas al menú archivo y eliges Guardar cómo y le pones el nombre que tú prefieras con la extensión H. Asegúrate de guardarlo en el directorio INCLUDE de tu proyecto. Si utilizas otro nombre de archivo asegúrate de llamrlo por el nombre que tú definiste.
Para mayor información te sugiero que leas el capítulo "Directivas del Preprocesador" y "#Define.. "
Resumen:
Hemos definido una variable pública desde el programa principal del sistema que te servirá para llamar los formularios.
Desde el evento clic de tu botón Nuevo llamas al procedimiento VALIDFILE que verifica si has definido un formulario para ejecutar. El procedimiento evalúa el valor de la variable P_Form_Name y ejecuta el formulario, o da un mensaje de Comando Deshabilitado.
Pero... ¿Dónde defino el nombre del formulario?
Muy simple, más adelante cuando crees un formulario BASADO en la clase MIFORM y le agregues el COMMANDGROUP que creaste sólo deberás agregar este código al botón nuevo:
THISFORM.MOUSEPOINTER=11
P_FORM_NAME= "miformulario.scx"
DODEFAULT()
THISFORM.MOUSEPOINTER=0
Fíjate que estás signando el valor a la variable p_form_name y luego llamas al código de la clase con dodefault(). El código de la clase verifica la variable y luego ejecuta el formulario.
Ahh, me olvidaba: en el evento init de tu clase miform debes agregar este código:
P_FORM_NAME=""
De esta forma estarás reinicializando el valor de la variable P_FORM_NAME para evitar que queden valores almacenados en ella y que provengan de formularios anteriores.
Hola! Te explico por partes: en el inicio de tu explicación, me orientas que agregue en el programa principal la definición de la variable publica que sera la que almacenara el nombre del formulario que debe ejecutarse... pero la situación es que yo no he creado un programa principal (en la pestanna de códigos). He creado la clase miform y micommandbuttons que me orientastes, pero el programa principal no! ¿Me comprendes? O.¿o?
Estoy creando las clases desde cero "0"... es decir, en mi administrador de proyectos, no estoy utilizando un proyecto anterior, sino más bien, estoy "comenzado" a crear las clases desde cero para no revolver y confundirme con otras cosas de otros proyectos... no se me comprendes..!?
Si te comprendo
Entonces haz lo siguiente:
Debemos comenzar por crear un nuevo proyecto con el asistente, y cuando te pregunte si quieres crear la estructura de directorios del proyecto responde que si.
Luego que finalices me avisas para repasar lo que debes hacer
Ok! Ya lo he creado y he dado si en crear la estructura de directorios del proyecto!
Fíjate entonces en la pestaña Código del Administrador de proyectos debe haber un programa del con el mismo nombre del proyecto y que está en negrita.
Edita ese programa y antes del comando read events, al inicio del programa, pega el siguiente código:
public p_form_name && tú puedes utilizar el nombre de variable que mas te guste
Luego, después de la clausula read events lo más al final posible pega este otro código:
Release alll
Una vez que hayas hecho esto, busca desde el explorador de windows los archivos vcx y vct de la biblioteca de clases que tú creaste y copiarlos a la carpeta Libs del nuevo proyecto.
Luego, desde la pestaña clases del Administrador de Proyectos agrega a tu proyecto la biblioteca de clases que tu creaste, haciengo click en agregar.
Cuando hayas finalizado eso continúa con lo siguiente:
Creación de archivo de Texto con Mensajes:
Selecciona la pestaña Otros desde el Administrador de Proyectos, luego selecciona Archivos de Texto, y luego das click en Nuevo.. Se abrirá el editor de código al que estás habituado.
Allí copiarás este código:
*******************
#DEFINE _MBXTIT            "Nombre de tu Sistema - Mensaje del Sistema:"
#DEFINE _MBXFRMT        0+48+0        && Aceptar + Exclamación + 1º boton.
#DEFINE _DISABLE        "Este comando no se encuentra Habilitado. Disculpe las molestias."
Luego vas al menú archivo y eliges Guardar cómo y le pones el nombre que tú prefieras con la extensión H. Asegúrate de guardarlo en el directorio INCLUDE de tu proyecto. Si utilizas otro nombre de archivo asegúrate de llamrlo por el nombre que tú definiste.
Para mayor información te sugiero que leas el capítulo "Directivas del Preprocesador" y "#Define.. "
Finalmente agrega a la carpeta graphics de tu proyecto los archivos bmp y msk que descargaste ayer, luego, desde la pestaña Otros, selecciona Otros Archivos y agrega los archivos bmp y msk a tu proyecto.
Cuando finalices me avisas para probar.
He realizado todas las orientaciones de tu ultimo envío! Esa parte Resulto sin inconvenientes! Ahora, luego de crear el archivo de extensión H y guardarlo en INCLUDE, me dispuse a continuar con lo que había dejado atrás: pegar el código del procedimiento Validfile en mi clase form, pero al dar click en guardar, aparece el error "Archivo no existe" y sennala en el código, la parte de
#INCLUDE EBM.H
¿Cómo procedo?
Si ya agregaste el archivo de extensión H a tu proyecto como te indiqué ignora el error. Se debe a que aún no has vuelto a generar el proyecto.
Vuelve a generar el proyecto, elige la opción volver a compilar todos los archivos y el error desaparecerá
Ok! Realice lo que me orientastes! A ESTE momento, y sin ningún otro inconveniente, he cumplido con todas las orientaciones que me has dado y he realizado todo a como me has indicado! ¿Permíteme preguntarte cual es el siguiente paso?XD
Qué alegría!
Haber si terminamos bien el día !
Si has completado todos los pasos vamos a dar el último: probemos si funciona !
Desde la pestaña Formularios del administrador de proyectos dale click a Nuevo.. y luego a Nuevo Formulario. Se abrirá el diseñador de formularios
* Aquí presta atención *
Cuando se haya abierto el formulario en blanco selecciona en el menú de arriba el menú Ver, y luego elige Barra de Herramientas Controles de Formularios. Se abrirá la Barra de herramientas. El segundo botón de la barra de herramientas dice Ver Clases, dale clic, selecciona Agregar y luego busca en el directorio LIBS de tu proyecto el archivo vcx correspondiente a la Biblioteca de clases que creaste ayer y luego dale click a abrir.
Verás que la Barra de Herramientas cambia y te muestra las clases que tú creaste. Entre ellas está miform (o como tú lo hayas llamado) pincha sobre el y luego sobre el formulario. Recibirás un mensaje diciéndote que es necesario crar un formset... responde que sí.
Ahora tienes dos formularios abiertos uno sobre el otro, coge el formulario de arriba y desplázalo un poco para que puedas ver el que está detrás. Luego selecciona el que está abajo y vete al menú formulario y selecciona quitar formulario. Vuelve al Menú formulario y elige Quitar conjunto de formularios.
* Ahora estamos trabajando sobre un formulario basado en la clase que tú creaste *
Pincha sobre el objeto COMMANDGROUP que tú creaste y que está en la Barra de Herramientas y luego cliquea sobre el formulario. Acomoda el control donde te plazca y luego haz click derecho sobre el COMMANDGROUP Y SELECCIONA modificar. Finalmente selecciona el botón Nuevo de tu COMMANDBUTTON haciendo doble click sobre él.
Cerciórate que el evento que te muestra la ventana de edición es el evento click
Copia y pega el siguiente código:
THISFORM.MOUSEPOINTER=11
P_FORM_NAME= ""
DODEFAULT()
THISFORM.MOUSEPOINTER=0
Guarda el formulario y ejecútalo, luego haz clic sobre el botón Nuevo. Si todo está correcto deberás recibir un mensaje de que el control no se encuentra habilitado. Es el mensaje que definiste en el archivo con extensión H.
Si todo esto funciona da por finalizada la pregunta y continuamos con el código para la clase de Botón Editar.
Buena Suerte.
Hola!!! He realizado tus ultimas orientaciones!!! Y he ejecutado el form... pero al dar click sobre el boton nuevo, me arroja un mensaje "Variable '_Disable_' no se encuentra"!!! Y sennala en el procedimiento Validfile del form de la clase lo siguiente: "=MESSAGEBOX (_DISABLE, _MBXFRMT, _MBXTIT)"!!!
x.x! He revisado minuciosamente todo el procedimiento que me has orientado, paso a paso, código a código, ventana por ventana... pero no logro determinar en donde falle...! Jajaja! X.X! XD
Pegó en el palo !
Abre el archivo de texto con extensión H y comprueba que tenga definido el siguiente código:
#DEFINE _MBXTIT            "Nombre de tu Sistema - Mensaje del Sistema:"
#DEFINE _MBXFRMT        0+48+0        && Aceptar + Exclamación + 1º boton.
#DEFINE _DISABLE        "Este comando no se encuentra Habilitado. Disculpe las molestias."
Fífate, en el tercer renglón está la variable _DISABLE
Si cuando la definiste le cambiaste el nombre, también debes cambiar el nombre de la variable en el procedimiento VALIDFILE en la definición de clase miform.
Un comentario:
En el archivo de texto H luego de definir la CONSTANTE
#DEFINE _DISABLE
Presiona una vez la tecla tabulación antes de escribir el texto del mensaje: "Este comando no se encuentra Habilitado. Disculpe las molestias."
La definición de Constantes es más efectiva que la definición de variables.
Si quieres conocer más al respecto busca en la ayuda de Visual FoxPro "Directivas del Preprocesador".
:D :D Hola Carlos! Definitivamente pegue en el palo! Jaja! Te explico: comprobé el código del archivo de texto de extensión H y lo tengo correcto! La variable _Disable la deje con ese nombre en el Archivo de texto y también en el validfile del clase form! Pero sigue sin reconocer la variable cuando doy click en el button nuevo! Sabes... se me ocurrió que para verificar que ese es el único error, en lugar de poner "=MESSAGEBOX (_DISABLE, _MBXFRMT, _MBXTIT)" en el validfile de la class form, puse directamente: ""=MESSAGEBOX ("Este comando no se encuentra habilitado, Disculpe las molestias)" y guarde cambios y ejecute... al dar click, recibo el mensaje correcto de que el comando no esta habilitado y un botón "OK".. tal y como tu me dijiste debía recibir! Se supone que con eso compruebo que esta bien y funciona... ¿aunque sea utilizando un mensaje "directo"? Espero tus Observaciones! Saludos! (^_^)!
Está perfecto lo que hiciste. Aunque es muy extraño que no este funcionando el archivo H
Vamos a realizar el siguiente chequeo para solucionar el problema de raíz:
1) Verifica que tu archivo H se encuentre incluido en "Archivos de Texto" del proyecto desde la pestaña "Otros" del Administrador de Proyectos. Si no está, agrégalo al proyecto.
2) Descarga el archivo entorno.prg desde http://rapidshare.com/files/419455742/entorno.rar.html
3) Luego de descomprimirlo ponlo en la carpeta PROGS de la estructura de directorios de tu proyecto.
4) Desde la pestaña Código del Administrador de Proyectos agrega el archivo entorno. Prg a tu proyecto.
5) Una vez que lo veas en la lista de archivos del proyecto, dale clic derecho y selecciona Excluir. Esto es debido a que este programita nos asegurará que se cumplen ciertos parámetros mientras estás programando. Desde ahora cada vez que abras el proyecto asegúrate de ejecutar este archivo antes de hacer otra cosa. Lo hemos excluido ya que se trata de una "muleta" que no forma parte de tu proyecto, simularía la ejecución de tu archivo principal.
6) Ejecuta el archivo entorno. Prg
7) Reemplaza el código del procedimiento VALIDFILE de la clase MiForm. Asegúrate de que si has cambiado nombres los mismos sean los adecuados dentro del procedimiento.
*---------------------------------------------------------------*
*  Llamado desde la clase _Comdgroup
*
*  Verifica si hay algún nombre de archivo(.scx) especificado
*
*  DEVUELVE VALORES NUMERICOS:
*    0 -- No hay ningún archivo especificado
*    1 -- Si hay un archivo especificado
*---------------------------------------------------------------*
THISFORM.MOUSEPOINTER= 11
#INCLUDE EBM.H
LOCAL V_FILENAME
IF EMPTY(P_FORM_NAME)
    V_FILENAME=0
    =MESSAGEBOX (_DISABLE, _MBXFRMT, _MBXTIT)
    ELSE
    V_FILENAME=1
ENDIF
THISFORM.MOUSEPOINTER= 0
RETURN V_FILENAME8) Genera nuevamente el proyecto seleccionando volver a compilar todos los archivos.
9) Vuelve a repetir la prueba.
10) Cuéntamen que ha sido todo un éxito.
11) Finaliza la pregunta y vamos a la otra: Código para la clase de Botón Editar.
Aguardo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas