Ejemplos de uso del NODEFAULT y el DODEFAULT()

2,954 views
Skip to first unread message

Edgar Acevedo

unread,
Jun 6, 2011, 10:45:39 AM6/6/11
to publice...@googlegroups.com, aper...@gmail.com
Hola amigos...!!!

Estuve recientemente leyendo en la ayuda de VFP acerca del uso del NODEFAULT, pero no encontré ejemplos concretos.  El hecho de que se mencione que "detiene" la ejecución natural de un evento me hace pensar que mas pareciera un RETURN (aunque se que NO debe serlo).  ¿ Que utilidad tiene ?  ¿ Cuando "se dispara" y detiene la ejecución del evento ?  ¿ Hay ejemplos para idiotas (como éste su servidor) ?

Gracias por su atención...!!!



Luis Maria Guayan

unread,
Jun 6, 2011, 11:03:21 AM6/6/11
to publice...@googlegroups.com
Mira este ejemplo, en el KeyPress del TextBox, si la tecla presionada no esta entre "a" y "g" (minúsculas) ejecuto en NODEFAULT, o detiene el ingreso de la letra correspondiente

PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show
RETURN

DEFINE CLASS form1 AS form
    Autocenter = .T.
    Caption = "Form1"
    Name = "Form1"

    ADD OBJECT text1 AS textbox WITH ;
        Height = 23, left = 36, Top = 36, ;
        Width = 300, Name = "Text1"

    PROCEDURE text1.KeyPress
        LPARAMETERS nKeyCode, nShiftAltCtrl
        IF NOT BETWEEN(nKeyCode, 97, 103)
          NODEFAULT
        ENDIF
    ENDPROC
ENDDEFINE

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Jairo Miranda

unread,
Jun 6, 2011, 11:45:22 AM6/6/11
to publice...@googlegroups.com

Nunca hay personas Así dentro de la comunidad de Fox , solo hay personas que están tratando de aprender , tu eres una.   Foxpro es un lenguaje de programación orientado a objeto (POO)

Te mando la descripción que da el manual de  fox. (copia y pega en la línea de comandos el ejemplo de abajo)

 

NODEFAULT y el DODEFAULT()  manejan la jerarquía de clases en fox

Además de escribir código para los métodos y eventos de un objeto, puede ampliar el conjunto de métodos en las subclases de clases de base de Visual FoxPro. Estas son las reglas para escribir código de evento y métodos:

  • El conjunto de eventos para las clases de base de Visual FoxPro es limitado y no puede ampliarse.
  • Todas las clases reconocen un conjunto limitado de eventos predeterminados, que incluye como mínimo los eventos Init, Destroy y Error.
  • Al crear en una definición de clase un método con el mismo nombre que un evento reconocible por la clase, el código del método se ejecutará cuando se produzca el evento.
  • Puede agregar métodos a las clases mediante la creación de un procedimiento o una función en la definición de clase.
  • Puede crear métodos Access y Assign para sus clases si crea un procedimiento o una función con el mismo nombre que una propiedad de clase y anexa _ACCESS o _ASSIGN al nombre de procedimiento o de función.

Llamar al código de evento en la jerarquía de clases

Al crear una clase, ésta hereda automáticamente todas las propiedades, los métodos y los eventos de la clase primaria. Si se escribe código para un evento en la clase primaria, ese código se ejecutará cuando se produzca el evento con respecto a un objeto basado en la subclase. Sin embargo, podrá sobrescribir el código de la clase primaria escribiendo código para el evento en la subclase.

Para llamar explícitamente al código de evento en una clase primaria cuando la subclase tiene código escrito para el mismo evento, utilice la función DODEFAULT( ).

Por ejemplo, podría tener una clase llamada cmdBottom basada en la clase de base del botón de comando que tuviera el código siguiente en el evento Click:

GO BOTTOM
THISFORM.Refresh

Al agregar un objeto basado en esta clase a un formulario llamado, por ejemplo, cmdBottom1, puede decidir que también desea mostrar un mensaje para informar al usuario de que el puntero de registro está en la parte inferior de la tabla. Podría agregar el código siguiente al evento Click del objeto para mostrar el mensaje:

WAIT WINDOW "At the Bottom of the Table" TIMEOUT 1

Sin embargo, al ejecutar el formulario se muestra el mensaje, pero el puntero de registro no se mueve porque nunca se ejecuta el código del evento Click de la clase primaria. Para asegurarse de que también se ejecuta el código del evento Click de la clase primaria, incluya las siguientes líneas de código en el procedimiento del evento Click del objeto:

DODEFAULT( )
WAIT WINDOW "At the Bottom of the Table" TIMEOUT 1

Nota   Puede utilizar la función ACLASS( ) para determinar todas las clases de la jerarquía de clases de un objeto.

Impedir la ejecución del código de clase de base

En algunos casos, deseará evitar que se produzca el comportamiento predeterminado de la clase de base en un evento o método. Para ello, incluya la palabra clave NODEFAULT en el código de método que escriba. Por ejemplo, el programa siguiente utiliza la palabra clave NODEFAULT en el evento KeyPress de un cuadro de texto para impedir que se muestren en el cuadro los caracteres escritos:

frmKeyExample = CREATEOBJECT("test")
frmKeyExample.Show
READ EVENTS
DEFINE CLASS test AS FORM
  ADD OBJECT text1 AS TEXTBOX
  PROCEDURE text1.KeyPress
   PARAMETERS nKeyCode, nShiftAltCtrl
   NODEFAULT
   IF BETWEEN(nKeyCode, 65, 122) && between 'A' and 'z'
    This.Value = ALLTRIM(This.Value) + "*"
    ACTIVATE SCREEN      && send output to main Visual FoxPro window
    ?? CHR(nKeyCode)
   ENDIF
  ENDPROC
  PROCEDURE Destroy
   CLEAR EVENTS
  ENDPROC
ENDDEFINE

Walter R. Ojeda Valiente

unread,
Jun 6, 2011, 12:15:02 PM6/6/11
to publice...@googlegroups.com
Hola Edgar

NODEFAULT lo que hace es evitar que el evento que normalmente ocurriría se produzca. Por ejemplo, en un campo de texto lo normal es que si un usuario presiona una tecla esa tecla se muestre en el campo de texto. Presiona una "A", ves una "A", presiona una "S", ves una "S". Con NODEFAULT puedes decirle al VFP que no quieres que eso ocurra, por ejemplo puedes escribir en el método KEYPRESS():

MiTecla = CHR(nKeyCode)

IF MiTecla = "A"
  =MESSAGEBOX("PROCESO NÚMERO 1")
  NODEFAULT
ENDIF

IF MiTecla = "S"
  =MESSAGEBOX("PROCESO NÚMERO 2")
  NODEFAULT
ENDIF

y en este caso, si el usuario presiona una "A" o una "S" esas letras no se mostrarán en el campo de texto sino que se mostrarán los mensajes correspondientes.

NODEFAULT puedes usar en cualquier método, no solamente en KEYPRESS()

Y DODEFAULT() es la función inversa. Si escribiste un NODEFAULT y después quieres que el método haga lo que se supone que debe hacer entonces escribes DODEFAULT().

Saludos.

Walter.




Date: Mon, 6 Jun 2011 08:45:39 -0600
Subject: [vfp] Ejemplos de uso del NODEFAULT y el DODEFAULT()
From: aper...@gmail.com
To: publice...@googlegroups.com; aper...@gmail.com

Edgar Acevedo

unread,
Jun 6, 2011, 11:29:28 PM6/6/11
to publice...@googlegroups.com, aper...@gmail.com
Perfecto amigos....!!!!

Muchas gracias por sus aportes.  Ya tengo material suficiente para hacer prueba y jugar con este par de comandos.

Nuevamente, gracias a todos....!!

Daniel Sánchez

unread,
Jun 7, 2011, 9:40:37 AM6/7/11
to publice...@googlegroups.com
Podría agregar a todo lo antes expuesto, en el caso de haber creado una clase, donde tenemos métodos y estos métodos se pueden sobreescribir, en determinados casos cuando sobreescribimos en el método el código del método el cual es instanciado deja de ejecutar el código original y ejecuta el código nuevo que ponemos, pero si deseamos que también se ejecuta el código original + nuestro nuevo código adicionado en dicho método, simplemente ponemos el comando dodefault(), el cual ejecutara el código original del método adicional al código que hemos escrito en la nueva instancia del objeto o clase.

Espero no enredarte demasiado.

Saludos

-- 
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

Walter R. Ojeda Valiente

unread,
Jun 7, 2011, 1:20:51 PM6/7/11
to publice...@googlegroups.com
Es cierto y es algo muy importante.

Tienes una clase base que hace algo en el método CLICK(), (por ejemplo)

Tienes una clase derivada que quieres que en el método CLICK() haga lo mismo que la clase base y además algunas otras cosas. Allí debes usar DODEFAULT() porque si no lo usas entonces el código de la clase base nunca será ejecutado.

Saludos.

Walter.

 


Date: Tue, 7 Jun 2011 08:40:37 -0500
Subject: Re: [vfp] Re: Ejemplos de uso del NODEFAULT y el DODEFAULT()
From: resets...@gmail.com
To: publice...@googlegroups.com

ibania blanco

unread,
Jun 16, 2011, 6:28:45 PM6/16/11
to Comunidad de Visual Foxpro en Español
cuando conoci visual foxpro no se cual era, por ahi por 1 2 3, y lei
lo que el amigo escribio JAIRO MIRANDA, dije dios mio esto no es para
mi, nunca aprendere este lenguaje, pero cuando lei lo que el amigo
walter ojeda valiente, describe, dije no si esto es facil.

que diferencia

On 6 jun, 09:45, "Jairo Miranda" <ja...@vidapanama.com> wrote:
> Nunca hay personas Así dentro de la comunidad de Fox , solo hay personas que
> están tratando de aprender , tu eres una.   Foxpro es un lenguaje de
> programación orientado a objeto (POO)
>
> Te mando la descripción que da el manual de  fox. (copia y pega en la línea
> de comandos el ejemplo de abajo)
>
> NODEFAULT y el DODEFAULT()  manejan la jerarquía de clases en fox
>
> Además de escribir código para los métodos y eventos de un objeto, puede
> ampliar el conjunto de métodos en las subclases de clases de base de Visual
> FoxPro. Estas son las reglas para escribir código de evento y métodos:
>
> *       El conjunto de eventos para las clases de base de Visual FoxPro es
> limitado y no puede ampliarse.
> *       Todas las clases reconocen un conjunto limitado de eventos
> predeterminados, que incluye como mínimo los eventos Init
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/lnginit_event.htm> , Destroy
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/lngdestroy_event.htm>  y Error
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/lngerror_event.htm> .
> *       Al crear en una definición de clase un método con el mismo nombre
> que un evento reconocible por la clase, el código del método se ejecutará
> cuando se produzca el evento.
> *       Puede agregar métodos a las clases mediante la creación de un
> procedimiento o una función en la definición de clase.
> *       Puede crear métodos Access y Assign
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/dggrfaccessassignmethods.htm>  para sus clases si crea un
> procedimiento o una función con el mismo nombre que una propiedad de clase y
> anexa _ACCESS o _ASSIGN al nombre de procedimiento o de función.
>
> Llamar al código de evento en la jerarquía de clases
>
> Al crear una clase, ésta hereda automáticamente todas las propiedades, los
> métodos y los eventos de la clase primaria. Si se escribe código para un
> evento en la clase primaria, ese código se ejecutará cuando se produzca el
> evento con respecto a un objeto basado en la subclase. Sin embargo, podrá
> sobrescribir el código de la clase primaria escribiendo código para el
> evento en la subclase.
>
> Para llamar explícitamente al código de evento en una clase primaria cuando
> la subclase tiene código escrito para el mismo evento, utilice la función
> DODEFAULT(
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/lngdodefaultlp_rp.htm>  ).
>
> Por ejemplo, podría tener una clase llamada cmdBottom basada en la clase de
> base del botón de comando que tuviera el código siguiente en el evento Click
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/lngclick_event.htm> :
>
> GO BOTTOM
> THISFORM.Refresh
>
> Al agregar un objeto basado en esta clase a un formulario llamado, por
> ejemplo, cmdBottom1, puede decidir que también desea mostrar un mensaje para
> informar al usuario de que el puntero de registro está en la parte inferior
> de la tabla. Podría agregar el código siguiente al evento Click del objeto
> para mostrar el mensaje:
>
> WAIT WINDOW "At the Bottom of the Table" TIMEOUT 1
>
> Sin embargo, al ejecutar el formulario se muestra el mensaje, pero el
> puntero de registro no se mueve porque nunca se ejecuta el código del evento
> Click de la clase primaria. Para asegurarse de que también se ejecuta el
> código del evento Click de la clase primaria, incluya las siguientes líneas
> de código en el procedimiento del evento Click del objeto:
>
> DODEFAULT( )
> WAIT WINDOW "At the Bottom of the Table" TIMEOUT 1
>
> Nota   Puede utilizar la función ACLASS(
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/lngaclasslp_rp.htm>  ) para determinar todas las clases de
> la jerarquía de clases de un objeto.
>
> Impedir la ejecución del código de clase de base
>
> En algunos casos, deseará evitar que se produzca el comportamiento
> predeterminado de la clase de base en un evento o método. Para ello, incluya
> la palabra clave NODEFAULT en el código de método que escriba. Por ejemplo,
> el programa siguiente utiliza la palabra clave NODEFAULT en el evento
> KeyPress
> <mk:@MSITStore:C:\Archivos%20de%20programa\microsoft%20visual%20foxpro%209\ f
> oxhelp.chm::/html/lngkeypress_event.htm>  de un cuadro de texto para impedir

Walter R. Ojeda Valiente

unread,
Jun 16, 2011, 6:31:48 PM6/16/11
to publice...@googlegroups.com
¿O sea que eso significa que explico bien?

Muchas gracias.

:-)

Saludos.

Walter.



> Date: Thu, 16 Jun 2011 15:28:45 -0700
> Subject: [vfp] Re: Ejemplos de uso del NODEFAULT y el DODEFAULT()
> From: ibania...@hotmail.com
> To: publice...@googlegroups.com

David Jimenez Garzon

unread,
Sep 11, 2020, 4:46:53 PM9/11/20
to Comunidad de Visual Foxpro en Español
Walter sobre eso que dices de DODEFAULT y las clases tiene algun ejemplo

Carlos Miguel FARIAS

unread,
Sep 11, 2020, 4:51:01 PM9/11/20
to Grupo Fox
Y después de 9 años Walter se puede haber olvidado del tema.
O lo más probable que ya no esté en el foro, por lo que sea.
Feliz Viernes.🤗
Larga vida y prosperidad.🖖
Miguel 😷

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/663628fb-06e4-40ef-a119-f3bed429ea1cn%40googlegroups.com.

Edgar Acevedo

unread,
Sep 11, 2020, 4:55:49 PM9/11/20
to publicesvfoxpro
Walter ya no anda por estos rumbos.
Pero quizás encuentres algo o el mismo Walter te responda en su BLOG:
Tiene muchísimo y muy buen material de estudio de VFP.
El link:  Blog de Walter Ojeda

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/663628fb-06e4-40ef-a119-f3bed429ea1cn%40googlegroups.com.

David Jimenez Garzon

unread,
Sep 11, 2020, 8:58:55 PM9/11/20
to publice...@googlegroups.com
Gracias mi amigo

Has recibido este mensaje porque estás suscrito a un tema del grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/publicesvfoxpro/WRFYViguYKw/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/CAKboPe8VRo9qmiMDpFchkYcJnj3xoq1q%3DqtrTHb7oVJA-XcQag%40mail.gmail.com.


--
David Jiménez Garzón
Cel. 3113881655
Reply all
Reply to author
Forward
0 new messages