Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cerrar calendario de TDateTimePicker con la tecla Control (https://www.clubdelphi.com/foros/showthread.php?t=44263)

calogero 01-06-2007 18:26:35

Cerrar calendario de TDateTimePicker con la tecla Control
 
Código:

//todo esto en el evento keydown del datetimepicker
procedure TfrmCompras.dateTimeDiaMesPagoKeyDown(Sender: TObject;
Var Key: Word; Shift: TShiftState);
begin
  if Key = VK_CONTROL then begin 
      if notdateTimeDiaMesPago.DroppedDown then
        dateTimeDiaMesPago.Perform(WM_KEYDOWN,VK_F4,0);
      if dateTimeDiaMesPago.DroppedDown then
        dateTimeDiaMesPago.Perform(WM_KEYDOWN,VK_ESCAPE,0);
  end;
end;

tengo este codigo lo que deseo lograr es lo siguiente:
poder abrir y cerrar el calendario del tDateTimePicker
con la tecla control es decir deseo emular la tecla F4
con la que se abre y cierra por default el tDateTimePicker
pero lo no lo he podido hacer con la tecla control solo
logro que se abra pero si vuelvo a presionar control
no me la toma en cuenta y queda abierto el calendario
a menos que lo cierre con escape...

si alguien tiene una idea mejor por favor echeme la
mano, aqui mi jefe me trae frito con eso, gracias
por su ayuda ... :)

egostar 01-06-2007 18:50:36

Puedes emular la tecla Escape cuando el estado del DateTimePicker1 este en DroppedDown, algo así

Código Delphi [-]
procedure TForm1.DateTimePicker1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if DateTimePicker1.DroppedDown then
     keybd_event( VK_ESCAPE, 0, 0, 0 );
end;

Salud OS.

AGAG4 01-06-2007 19:07:40

Mano dura con el JEFE Calogero :), tu dime cuando lo clavamos al wey jajajajajajajajaj

egostar 01-06-2007 19:29:36

Cita:

Empezado por AGAG4
Mano dura con el JEFE Calogero :), tu dime cuando lo clavamos al wey jajajajajajajajaj

Achis, Achis los mariachis :eek:, no, yo no me llevo con el compañero calogero mi estimado Alfredo. Juego de manos es de villanos.:D:D

Salud OS.

AGAG4 01-06-2007 19:33:14

ACLARO!!!!
EgoStar no era para usted, lo que pasa es que calogero es un amigo, donde yo conozco al jefe de él, y aveces nos damos una que otra discusión el JEFE y YO, pero no pasa de alli, yo lo dije de broma pero para el JEFE DE CALOGERO.
:) :) :) :)

calogero 01-06-2007 19:39:06

Cita:

Empezado por egostar
Puedes emular la tecla Escape cuando el estado del DateTimePicker1 este en DroppedDown, algo así

Código Delphi [-]
procedure TForm1.DateTimePicker1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if DateTimePicker1.DroppedDown then
     keybd_event( VK_ESCAPE, 0, 0, 0 );
end;

Salud OS.


pues eso mismo es lo que hago pero no me funciona no me acepta la tecla escape

calogero 01-06-2007 19:47:34

Cita:

Empezado por egostar
Puedes emular la tecla Escape cuando el estado del DateTimePicker1 este en DroppedDown, algo así

Código Delphi [-]
procedure TForm1.DateTimePicker1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if DateTimePicker1.DroppedDown then
     keybd_event( VK_ESCAPE, 0, 0, 0 );
end;

Salud OS.


el codigo que no me funciona solo funciona para abrir el datetimepicker con el control pero no lo cierra con el control

Código Delphi [-]
//todo esto en el evento keydown del datetimepicker
procedure TfrmCompras.dateTimeDiaMesPagoKeyDown(Sender: TObject; 
Var Key: Word; Shift: TShiftState);
begin
  if Key = VK_CONTROL then begin  
      if not dateTimeDiaMesPago.DroppedDown then
        dateTimeDiaMesPago.Perform(WM_KEYDOWN,VK_F4,0);

     //Aqui es donde simulo la tecla escape
      if dateTimeDiaMesPago.DroppedDown then
        dateTimeDiaMesPago.Perform(WM_KEYDOWN,VK_ESCAPE,0);
  end;
end;

ya hice pruebas pero no lo cierra con el control nada mas lo abre

egostar 01-06-2007 19:50:31

Cita:

Empezado por calogero
pues eso mismo es lo que hago pero no me funciona no me acepta la tecla escape

Pues es que el código que usas nunca entra, yo ya probe el código que te muestro y me lo hace perfectamente

Esto no funciona

Código Delphi [-]
 
 if Key = VK_CONTROL then begin  
      if notdateTimeDiaMesPago.DroppedDown then
        dateTimeDiaMesPago.Perform(WM_KEYDOWN,VK_F4,0);
      if dateTimeDiaMesPago.DroppedDown then
        dateTimeDiaMesPago.Perform(WM_KEYDOWN,VK_ESCAPE,0);
  end;

Nunca entra a la condición porque F4 es una tecla de control interno del TDateTimePicker, no necesitas validarla, lo que necesitas validar es cuando está en modo DroppedDown.

Como te lo muestro aqui

Código Delphi [-]
  if DateTimePicker1.DroppedDown then
     keybd_event( VK_ESCAPE, 0, 0, 0 );


Cita:

Empezado por AGAG4
ACLARO!!!!
EgoStar no era para usted, lo que pasa es que calogero es un amigo, donde yo conozco al jefe de él, y aveces nos damos una que otra discusión el JEFE y YO, pero no pasa de alli, yo lo dije de broma pero para el JEFE DE CALOGERO.


Ah bueno, asi estamos en paz....:D

Edito: Esta bien que ya soy mayorcito, pero hablame de tu, no de usted.:)

Salud OS

roman 01-06-2007 19:56:00

A mi me ha funcionado así:

Código Delphi [-]
procedure TForm1.DateTimePicker1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if KEY = VK_CONTROL then
    if DateTimePicker1.DroppedDown then
    begin
      keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 );
      keybd_event(VK_ESCAPE, 0, 0, 0 );
    end
    else
    begin
      keybd_event(VK_F4, 0, 0, 0 );
    end;
end;

Si nada más pongo keybd_event(VK_ESCAPE, 0, 0, 0 ) actúa conmo si oprimiese Ctrl+Esc de manera que aparece el menú de inicio de Windows y no se cierra el DateTimePicker.

// Saludos

egostar 01-06-2007 20:05:36

Cita:

Empezado por roman
Si nada más pongo keybd_event(VK_ESCAPE, 0, 0, 0 ) actúa conmo si oprimiese Ctrl+Esc de manera que aparece el menú de inicio de Windows y no se cierra el DateTimePicker.

// Saludos

Te juro por el osito bimbo:D:D:D:D, que a mi me funciona bien con mi código, y tu código no hace nada.

Salud OS.

roman 01-06-2007 20:06:05

Mejor usar el evento OnKeyUp y ya funciona como comenta egostar:

Código Delphi [-]
procedure TForm1.DateTimePicker1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if KEY = VK_CONTROL then
    if DateTimePicker1.DroppedDown then
      keybd_event(VK_ESCAPE, 0, 0, 0 )
    else
      keybd_event(VK_F4, 0, 0, 0 );
end;

// Saludos

roman 01-06-2007 20:08:10

Je, je, creo que tú estás usando OnKeyUp

// Saludos

calogero 01-06-2007 20:08:37

Cita:

Empezado por egostar
Te juro por el osito bimbo:D:D:D:D, que a mi me funciona bien con mi código, y tu código no hace nada.

Salud OS.


Pues no es por darte la contra egostar pero a mi me pasa igual que a roman me activa el menu inicio...

calogero 01-06-2007 20:10:53

Cita:

Empezado por roman
A mi me ha funcionado así:

Código Delphi [-]
procedure TForm1.DateTimePicker1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if KEY = VK_CONTROL then
    if DateTimePicker1.DroppedDown then
    begin
      keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 );
      keybd_event(VK_ESCAPE, 0, 0, 0 );
    end
    else
    begin
      keybd_event(VK_F4, 0, 0, 0 );
    end;
end;



// Saludos

ya hice pruebas con tu código roman y si me funciona solo que en un formulario aislado, en el formulario donde lo necesito no me funciona pero eso ya es cuention mia tengo que ver que otras teclas me causan conflicto, pero gracias por tu ayuda...:)

calogero 01-06-2007 20:15:53

Cita:

Empezado por AGAG4
Mano dura con el JEFE Calogero :), tu dime cuando lo clavamos al wey jajajajajajajajaj

jajajaja me gustó la idea que planteaste AGAG4 pero parece que ya no va a ser necesario, ya los muchachos me dieron soluciones efectivas, pero de seguro se va a presentar una oportunidad en el futuro de llevar a cabo tu sugerencia aunke sea solo en el pensamiento jajajaja :D

un saludo a todos y gracias por tomarse el tiempo de responder.

egostar 01-06-2007 20:33:16

Cita:

Empezado por calogero
Pues no es por darte la contra egostar pero a mi me pasa igual que a roman me activa el menu inicio...

No pues esta bien, lo importante es que ya quedo, debo ver que carajos hice porque a mi me funcionó y no guarde el proyecto.:D:D:D

Salud OS.


La franja horaria es GMT +2. Ahora son las 07:25:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi