Calendario en un formulario de VFP9

Estoy agradecido por la ayuda que encuentro en la web de todoexpertos.

Estoy elaborando un formulario que incluye un calendario usando el oleControl, pues me puse a pensar si se puede realizar esta acción.

Cuando ya está insertado el calendario, al darle click al icono de la fecha se despliega el calendario para poder ver en modo completo.

Ahora mi pregunta es ¿puedo hacer lo mismo pero desde un commandbotton?

Es decir, al darle clik al cmdbotton automáticamente me muestre el calendario completo...

Es posible que exista un código, por ejemplo.

Thisform. OleControl1... Abrir el calendario completo.

Anticipo expresar mi agradecimiento,
Alcydez.

1 respuesta

Respuesta
1

Los combobox regularmente se extienden o abren cuando tienen el enfoque y llamas a la funcion keyboard así:

KEYBOARD '{F4}'

Si te paras en el olecontrol y das F4 se extiende el calendario.

Tendrías que buscar algo para que cuando le des clic al botón, se abra el calendario como lo deseas.

Si, estoy trabajando en ello, creame para mi que llevo unas semanas viendo este el VFP9 es difícil saber los códigos, pero vamos por un buen camino.
Por ahí he visto esto.

En el evento click del cmdbotton

thisform.olecontrolFECHA.click

Con ese código se supone que desplegaría, pero no me funciona, quizá se tenga que agregar algo en los eventos del olecontrolFECHA, quizá en el evento clic, pero no se me ocurre que podría ser.

Saludos.

Prueba el siguiente código:

 #define WM_LBUTTONDOWN 0x0201
 #define WM_SYSKEYDOWN  0x0104
 #define WM_SYSKEYUP    0x0105
  #define VK_MENU 12
  #define VK_DOWN 28
  LOCAL lnHWND
  declare integer SendMessage IN WIN32API ;
      integer hwnd, integer Msg, integer Wparam, integer lParam
  lnHWND=thisform.olecontrol1.hWnd
  SendMessage(m.lnHwnd,WM_LBUTTONDOWN,0,0)
  SendMessage(m.lnHwnd,WM_SYSKEYDOWN,VK_MENU+VK_DOWN,0)
  SendMessage(m.lnHwnd,WM_SYSKEYUP,VK_MENU+VK_DOWN,0)

Ponlo dentro de tu evento clic del botón. La variable lnHWND contiene el valor "handle" de tu olecontrol. Así que allí le pones el nombre de tu olecontrol.

Me avisas.

Estimado Devilzito, ese código que acabas de poner es lo máximo, lo he pegado en el evento Click del botón que ejecutará el calendario, y sí al hacer un click me sale el calendario, hasta ahí todo bien.

Ahora viendo mi formulario, tengo un TEXTBOXFECHA donde ingreso la fecha seleccionada y esa fecha que he seleccionado se copia al TEXTBOXFECHA, eso no me deja hacer.

Lo hice de la siguiente manera.

En evento KEYPRESS del TEXTBOXFECHA

#define WM_LBUTTONDOWN 0x0201
#define WM_SYSKEYDOWN  0x0104
#define WM_SYSKEYUP    0x0105
#define VK_MENU 12
#define VK_DOWN 28
  LOCAL oleFecha
  declare integer SendMessage IN WIN32API ;
      integer hwnd, integer Msg, integer Wparam, integer lParam
  oleFecha=thisform.olecontrol1.hWnd
  SendMessage(m.oleFecha,WM_LBUTTONDOWN,0,0)
  SendMessage(m.oleFecha,WM_SYSKEYDOWN,VK_MENU+VK_DOWN,0)
  SendMessage(m.oleFecha,WM_SYSKEYUP,VK_MENU+VK_DOWN,0)

Al presionar una tecla me despliega el calendario y me deja seleccionar la fecha, pero esa fecha no ingresa al TEXTBOXFECHA.

Agradezco tu tiempo para brindar tu ayuda. Gracias de corazón.

Atte.,

Alcydez

Dos preguntas en una.

Lo primero se resuelve como te indiqué, pero si tienes ese asunto de llevar el valor "clicqueado" a un textbox (que no entiendo porqué), entonces vamos por la vía más fácil:

Local loShell
Thisform. Olecontrol1. SetFocus
loShell=createObject("wscript.shell")
loShell.sendKeys("{F4}")

Con esto, abres el olecontrol. Entonces en tu evento "change" del olecontrol, pones la asignación a tu textboxt. Y ya.

Que burro que soy, el código que has puesto, está completo.

Lo he puesto en el Evento KEYPRESS del TEXTBOXTFECHA, y solo seguí los pasos.

Había obviado esta parte.

Escrito por Devilzito:"Ponlo dentro de tu evento clic del botón. La variable lnHWND contiene el valor "handle" de tu olecontrol. Así que allí le pones el nombre de tu olecontrol."

Quedo bien.

Muchas gracias, si necesito otra ayuda te estaré molestando.

Saludos,

Alcydez.

Ok Cierra la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas