• Sábado 4 de Mayo de 2024, 23:36

Autor Tema:  Uso De Dodefault()  (Leído 2963 veces)

deottawa

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Uso De Dodefault()
« en: Miércoles 17 de Agosto de 2005, 17:51 »
0
Un saludo para todos, recien acabo de registrarme.

Tengo una clase de un combobox cuyo evento MouseDown() esta modificado
para que Visual FoxPro 6.0 no realice el procesamiento predeterminado para
este evento en caso que se cumpla determinada condicion.

EVENTO MOUSEDOWN

IF CONDICION1 = .T.
 NODEFAULT
 THIS.STATUSBARTEXT = 'The control is read-only'
 RETURN
ELSE
 DODEFAULT(nButton, nShift, nXCoord, nYCoord)
ENDIF

Cuando CONDICION1 es falsa y se ejecuta el DODEFAULT() el combobox tiene
un comportamiento "un poco raro" en todas las instancias de esta clase
como por ejempo que cuando se mantiene oprimido el mouse sobre la parte
superior de la barra de desplazamiento vertical, el movimiento continuo de
los elementos de la lista no se produce. El problema queda resuleto si se
omite el llamado al DODEFAULT(). Alguien tiene una explicacion logica de
porque sucede esto? Quiere esto decir que nunca necesito llamar explicitamente el DODEFAULT() dentro de Eventos?

Nota: Un problema similar aparece cuando llamo al DODEFAULT() dentro del Evento INTERACTIVECHANGE() del mismo combobox.

gracias.

DrakerDG

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
    • http://drakerdg.xbot.es/wordpress/
Re: Uso De Dodefault()
« Respuesta #1 en: Miércoles 31 de Agosto de 2005, 21:50 »
0
:comp: Es probable que ocurra esto porque DODEFAULT() ejecuta, desde dentro de una subclase, el evento o método de clase primaria del mismo nombre .

Utiliza en cambio el operador ::

Encontre lo siguiente en el help de Visual Fox

Código: Text
  1.  
  2. :: (Operador de resolución de alcance)
  3. Ejecuta un método de clase primaria desde un método de subclase.
  4.  
  5. Sintaxis
  6.  
  7. cNombreClase::cMétodo
  8.  
  9. Comentarios
  10.  
  11. El operador :: se utiliza para ejecutar un método de clase primaria desde un método de subclase. Cuando cree una subclase, los métodos de subclase se heredarán automáticamente de la clase primaria. El operador :: permite ejecutar el método de clase primaria y realizar después otros procesos adicionales para el método de subclase. Las definiciones de subclase del ejemplo demuestran cómo se utiliza el operador :: para ejecutar el método de clase primaria en un método de subclase.
  12.  
  13.  
  14. Ejemplo de :: (Operador de resolución de alcance)
  15.  
  16. El ejemplo siguiente crea un formulario y agrega dos botones de comando al formulario. Al hacer clic en los botones puede salir del formulario (el segundo botón, cmdOtroBotón, llama al procedimiento clic de cmdSalir). Esta acción es posible por la creación de subclases. El operador de resolución de alcance llama al código de la clase principal para el objeto subclase.
  17.  
  18. frmMiForm = CREATEOBJECT("Form")
  19. frmMiForm.Width      = 450
  20. frmMiForm.Height     = 100
  21. frmMiForm.Caption    = "Ejemplo de resolución de alcance"
  22. frmMiForm.AutoCenter =.T.
  23. frmMiForm.AddObject("cmdSalir","cmdBotónSalir")
  24. frmMiForm.AddObject("cmdOtro","cmdOtroBotón")
  25. frmMiForm.SHOW                   && Muestra el formulario.
  26. READ EVENTS                      && Inicia el procesamiento de eventos.
  27.  
  28. El siguiente ejemplo define dos botones de comando. El primer botón se utilizará como subclase del segundo botón. La creación de la subclase se puede ver en las propiedades FontBold y ForeColor que se definen para cmdSalir, pero nunca se establece explícitamente para cmdOtroBotón. Definimos cmdOtroBotón como una subclase de cmdBotónSalir. Como resultado, este botón heredará todos los atributos definidos para cmdBotónSalir.
  29.  
  30. DEFINE CLASS cmdBotónSalir AS CommandButton
  31.     Caption    = "\<Salir"    && Título del botón de comando.
  32.     Left       = 175          && Borde izquierdo del botón.
  33.     Top        = 60           && Posición de la parte superior del botón.
  34.     Height     = 25           && Altura del botón.
  35.     Visible    = .T.          && Mostrar el botón en el formulario.
  36.     FontItalic = .T.          && Activar texto en cursiva.
  37.     ForeColor  = RGB(0,0,255) && Cambiar el color del texto del botón.
  38.  
  39.     PROCEDURE Click
  40.      WAIT WINDOW "Ejecutando el procedimiento CLICK para cmdSalir." TIMEOUT 1
  41.      CLEAR EVENTS    && Detiene el procesamiento de eventos, cierra Form.
  42. ENDDEFINE
  43. DEFINE CLASS cmdOtroBotón AS cmdBotónSalir
  44.  
  45.     Caption = "Haga clic aquí para salir."
  46.     Left    = 175
  47.     Top     = 30
  48.     Height  = 25
  49.      
  50.     PROCEDURE Click
  51.       WAIT WINDOW "Evento Click para el botón: cmdOtroBotón." TIMEOUT 1
  52.       cmdBotónSalir::Click
  53. ENDDEFINE
  54.  
  55.  
  56.  

En tu caso sería de la siguiente forma

Código: Text
  1.  
  2. *EVENTO MOUSEDOWN
  3.  
  4. IF CONDICION1 = .T.
  5. NODEFAULT
  6. THIS.STATUSBARTEXT = 'The control is read-only'
  7. RETURN
  8. ELSE
  9. TUCOMBOBOX::MOUSEDOWN(nButton, nShift, nXCoord, nYCoord)
  10. ENDIF
  11.  
  12.  
  13.  

Espero te sirva :suerte:
Saludos desde Guatemala, C. A.
Electrobotics