PDA

Ver la Versión Completa : MonthCalendar


shoulder
06-08-2008, 00:01:23
Hola, no se como hacer para diferenciar el click de las flechas de ambos lados del calendario para cambiar mes, con hacer click dentro del calendario, el problema es que yo quiero que haciendo click dentro del caelndario me pase un date a un maskedit, eso funciona perfecto, pero al hacer click en las flechas de ambos lados funciona tambien con el on click y me envia 01/01/2008..etc al maskedit.

Gracias.

dec
06-08-2008, 00:13:22
Hola,

Yo creo que el comportamiento es el esperado. Quiero decir, cuando pulsas las teclas, realmente cambia la fecha seleccionada en el componente, porque, las flechas cambian de mes, y este cambio se refleja en la fecha seleccionada. No sé. Igual habría alguna forma de conseguir diferenciar lo que dices, pero, insisto, creo que el comportamiento es el esperado.

Fíjate que si utilizas las propiedades "MinDate" y "MaxDate", limitando al usuario a que sólo pueda elegir un día del mes actual, por ejemplo, este no podrá hacer clic en las flechas, mejor dicho, no servirá de nada, y la fecha elegida no cambiará. Pero, si el usuario puede elegir la fecha, cualquier fecha, entonces puede usar las flechas, y la fecha habrá de cambiar en consecuencia, ¿no te parece? ;)

shoulder
06-08-2008, 00:24:21
Gracias, pero no me sirve porque estan cargando ausentimos de un año a la fecha y es comodo para ellos cambiar los meses con las fechas, el tema si pudiera diferenciar las flechas o sacarlas no les vendria el 01-01-2008 o el mes que elijan al maskedit.

dec
06-08-2008, 00:30:22
Hola,

No sé si me he explicado bien. Al "maskedit", aprovechando el evento "Onclick", le llegará la fecha que eliga el usuario en el calendario. Entonces, ¿qué problema hay? ¿No quieres que puedan elegir una determinada fecha? Si es así aprovecha las propiedades "MinDate" y "MaxDate" del calendario. Si todavía piensas que esto no te sirve, esperemos que algún compañero te pueda ayudar a hacer lo que quieres, pero, insisto en que no le veo mucho sentido... claro, que, puedo estar equivocado.

roman
06-08-2008, 00:31:19
Una opción es que utilices una variable Month (Integer) que inicializas al abrir el formulario:


Month := MonthOf(MonthCalendar1.Date);


En el evento OnClick del MonthCalendar te fijas si MonthOf(MonthCalendar1.Date) coincide con el valor de Month. Si no coincide es que se cambio el mes y evitas el llenado del MaskEdit:


procedure TForm1.MonthCalendar1Click(Sender: TObject);
begin
if MonthOf(MonthCalendar1.Date) <> Month then
Month := MonthOf(MonthCalendar1.Date)
else
MaskEdit := ...;
end;


Actualizas el valor de Month para que no te lo vuelva a detectar.

// Saludos

dec
06-08-2008, 00:47:55
Hola,

Pero, Román, ¿eso no vale lo mismo que si se usan las propiedades "MinDate" y "MaxDate"? Si usamos estas propiedades para que el usuario no pueda elegir sino un día del mes actual, aunque pulse las flechas, dará igual, no se cambiará de mes, ni tampoco la fecha, y por tanto no llegará al "maskedit". ¿No? Vamos, digo yo. :)

roman
06-08-2008, 00:52:13
Como tú dices, impides que el usuario cambie de mes, pero eso no es lo que se quiere, el usuario debe poder cambiar de mes. Lo único es que al cambiar de mes no quiere que automáticamente se seleccione el del mes siguiente. Es decir, si el usuario marco el 5 de agosto, al cambiar el mes se marcaría automáticamente el 5 de septiembre (o julio) que no necesariamente debe seleccionarse. El usuario tendría que borrar el dato manualmente.

// Saludos

shoulder
06-08-2008, 00:56:33
Gracias por Responderme, si entiendo lo de Maxdate y Min date y lo de Roman, el tema es que hoy los usuarios estaban molestos porque el maskedit se cargaba con el 01 mes año que elegian con la flecha y les tapaba la seleccion hecha dentro del calendario. El tema que non los queria condicionar porque era muy comodo moverse con las flechas y es raro no poder distinguir esas dos teclas.

Caro
06-08-2008, 01:08:07
Hola shoulder, también puedes utilizar un Calendar de la paleta Samples en vez del MonthCalendar y solo añades lo demas, como los botones para ir de mes en mes (Calendar1.PrevMonth y Calendar1.NextMonth; ), pero ya tendrías control sobre ellos.

Saluditos

shoulder
06-08-2008, 01:20:47
Gracias a todos , tema solucionado, hice un mezcla de lo explicado por todos ustedes y anda perfecto.

previamente prefijando un mes


if monthof(MonthCalendar1.Date) <> Month then
Month := MonthOf(MonthCalendar1.Date)
else
MaskEdit1.Text := datetostr(MonthCalendar1.Date);