PDA

Ver la Versión Completa : DateTimePicket y UpDown


tarco35
24-12-2006, 13:04:36
Saludos a todos... He situado un DateTimePicker (solo con Date) y las flechitas de up y down son muy pequeñas para una pantalla tactil. Podria asociar de alguna manera un TUpDown a esas flechitas para solaparlas en pantalla.
Gracias por su colaboracion...

marcoszorrilla
24-12-2006, 13:24:39
Al asociarlo tomará el tamaño de las flechitas con lo cual estarás en lo mismo. Sin embargo si fuera un MonthCalendar, saldrás ganando puesto que toma el tamaño del calendario.

Un Saludo.

tarco35
24-12-2006, 18:17:59
Estimado Marcos... por asociar me referia a que cuando actue hacia arriba o abajo el TUpDown le pase ese "click" a las flechitas del otro y funcione como si realmente le estubiese cliqueando a las flechitas pequeñas del componenteTDateTime....

roman
24-12-2006, 19:55:50
¿Qué las flechitas up-down del DateTimePicker no aparecen cuando se muestra la hora y no la fecha?

En todo caso, siempre puedes usar cualquier control, por ejemplo un SpeedButton y simular que se oprimen las flechas:


(* Flecha arriba *)
keybd_event(VK_UP, 0, 0, 0);
keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0);

(* Flecha abajo *)
keybd_event(VK_DOWN, 0, 0, 0);
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0);


// Saludos

Lepe
25-12-2006, 13:45:01
En todo caso, siempre puedes usar cualquier control, por ejemplo un SpeedButton y simular que se oprimen las flechas:


Aunque lo has dejado claro, podría haber confusión: No se podría utilizar cualquier control, sino que debería usarse un SpeedButton, precisamente porque este control no captura el foco del ratón, por tanto, se puede estar en el TDateTimePicker y al pulsar el SpeedButton, el foco sigue estando en el TdateTimePicker, por tanto esas pulsaciones se envían a dicho control.

Si usamos un simple TButton, al pulsarlo, el foco estaría sobre el TButton, por tanto esa pulsación la procesaría el TButton, no el TdatetimePicker.

Para más aclaración:
las flechitas de up y down son muy pequeñas para una pantalla tactil.

Saludos

tarco35
25-12-2006, 19:49:53
Lo he probado y funciona correctamente sobre el componente que tenga el foco, sea el que sea, Grid, TDateTimer, Combo... pro.. ¿habria alguna forma de hacerlo para que solo funcionara para un determinado componente?
Gracias por todo.

roman
26-12-2006, 07:14:21
No se podría utilizar cualquier control, sino que debería usarse un SpeedButton, precisamente porque este control no captura el foco del ratón, por tanto, se puede estar en el TDateTimePicker y al pulsar el SpeedButton, el foco sigue estando en el TdateTimePicker, por tanto esas pulsaciones se envían a dicho control.


Tienes razón en esto que comentas. La verdad es que originalmente había puesto un DateTimePicker1.SetFocus justo antes del código expuesto y por alguna razón que ahora no ve claro lo quité :) Poniendo el foco en el control deseado antes de simular la tecla resolvería el problema con un Button u otro control y creo que es lo que resolvería lo último que plantea tarco35.

// Saludos

Lepe
26-12-2006, 12:43:28
Otra solución a la planteada por roman:

En el Onclick del SpeedButton:

if (Self.ActiveControl is TdatetimePicker) and
(TDateTimePicker(Self.ActiveControl) = DatetimePicker1) then
// aqui lanzamos los eventos de teclado
else
ShowMessage(' Haga clic primero en el Control de fechas');

Quizás en este caso me parece más acertada la solución de roman. Normalmente esos SpeedButtons se colocan cerca del TDateTimePicker, por tanto el usuario al pulsar dicho botón, espera que automáticamente cambie ese control y no otro.

Para hacer más intuitiva la cosa, puedes poner un GroupBox y dentro el TDatetimePicker y los dos SpeedButton, así quedará más claro al usuario como funciona.

Saludos