Página 1 de 1

Duda con TDateEdit

Publicado: Sab Ene 21, 2023 10:12 am
por buzonjmartial
Buenos días,

necesitaría anular en esta clase la función de subir o bajar de día en la fecha, con las teclas flecha arriba y abajo.

El problema son quejas de usuarios, que sin darse cuenta cambian la fecha de documentos importantes por haber tocado las flechas sin darse cuenta.

Una ayudita por favor.

Re: Duda con TDateEdit

Publicado: Lun Ene 23, 2023 5:33 pm
por ignacio
Hola,

Me temo que va a tener que sobrecargar la clase TDateEdit con este código:

Código: Seleccionar todo

METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TDateEdit

   ::oForm:SendMsg( WM_CHANGEUISTATE, MakeLong( UIS_CLEAR, UISF_HIDEFOCUS ) )
   ::Refresh()  // NOTA: Bug*
   IF nKey == VK_F4 .AND. ! lGetKeyState( VK_CONTROL )
      TDropCalendar():New( Self )
      RETURN 0
   ENDIF

RETURN ::Super:WMKeyDown( nKey, nFlags, hWnd )
Saludos

Re: Duda con TDateEdit

Publicado: Mar Ene 24, 2023 9:27 pm
por buzonjmartial
Ignacio,

muchas gracias por iluminarme. Aunque he tenido que hacer cambios para que funcione, por si a alguien le sirve.

Código: Seleccionar todo

CLASS TDateEdit FROM XDateEdit

 PUBLISHED:

    METHOD WMKeyDown( nKey, nFlags, hWnd )

ENDCLASS

METHOD WMKeyDown( nKey, nFlags, hWnd ) CLASS TDateEdit

   ::oForm:SendMsg( WM_CHANGEUISTATE, MakeLong( UIS_CLEAR, UISF_HIDEFOCUS ) )
   ::Refresh()  // NOTA: Bug*

   IF nKey == VK_UP .OR. nKey == VK_DOWN // No hace nada
      RETURN 0
   ELSE
      IF nKey == VK_F4 .AND. ! lGetKeyState( VK_CONTROL )
         TDropCalendar():New( Self )
         RETURN 0
      ENDIF
   ENDIF

RETURN ::Super:WMKeyDown( nKey, nFlags, hWnd )
Además he tenido que añadir a continuación, la clase TDropCalendar completa y las funciones en C que necesita, porque todo estaba como STATIC y daba error al compilar.

Muchas Gracias.

Re: Duda con TDateEdit

Publicado: Mié Ene 25, 2023 10:05 am
por ignacio
Hola,

Creo que no es una buena idea hacer un RETURN 0 cuando realmente no se hace nada con la pulsación de VK_UP y VK_DOWN, lo suyo es que se se llame a ::Super:WmKeyDown().

Saludos

Re: Duda con TDateEdit

Publicado: Mié Ene 25, 2023 11:48 am
por buzonjmartial
Hola,

Sí, así lo puse, pero seguía cambiando el día incrementándolo y decrementándolo.

Será por alguna herencia, pero no sabía por cual y al ponerlo así lo ignora.

Puedes probar el código que me pusiste y verás que no cambia nada.