![]() |
DateTimePicker no funciona
Hola:
Tengo un DateTimePicker con la propiedad DateMode a ComboBox. Al abrir el combo aparece el calendario del mes pero al picar en un día el calendario se va a la esquina superior izquierda sin coger la fecha, le vuelvo a picar y desaparece pero también sin coger la fecha. He descubierto que todo esto es consecuencia de un código que hace aproximadamente un mes me paso alguien en este foro, creo que Román, que me permite situar un MessageBox en cualquier sitio de la pantalla: El código es este: code:-------------------------------------------------------------------------------- interface type TForm1 = class(TForm) private MsgTitle: String; // Título del mensaje MsgX, MsgY: Integer; // Posición del mensaje procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE; end; implementation procedure TForm1.WMActivate(var Message: TWMActivate); var Buffer: array[Byte] of Char; begin inherited; if Message.Active = WA_INACTIVE then begin GetWindowText(Message.ActiveWindow, Buffer, SizeOf(Buffer)); if Buffer = MsgTitle then SetWindowPos( Message.ActiveWindow, 0, MsgX, MsgY, 0, 0, SWP_NOSIZE or SWP_NOZORDER ) end; end; end. -------------------------------------------------------------------------------- Cuando desees mostrar el cuadro de mensaje ajusta primero las variables MsgTitle, MsgX y MsgY: code:-------------------------------------------------------------------------------- MsgTitle := 'Mi mensaje'; MsgX := 100; MsgY := 100; Application.MessageBox('Hola', PChar(MsgTitle), 0); -------------------------------------------------------------------------------- Si quito esto el DateTimePicker va correcto. ¿Quisiera saber si puedo solucionar este problema del DateTimePicker sin prescindir de este código para situar el MessageBox? Gracias. Tomás. |
Cita:
De cualquier forma prueba cambiando la línea Código:
if Buffer = MsgTitle then Código:
if (Buffer <> '') and (Buffer = MsgTitle) then El efecto secundario pasó porque el DateTimePicker usa un cuadro de diálogo para mostrar el calendario. Este cuadro de diálogo no tiene título y seguramente cuando lo muestras la variable MsgTitle también es una cadena vacía. Nota Previendo futuras consecuencias secundarias he de aclarar (debí hacerlo en aquel entonces) que en lo particular no me gusta este método para colocar los cuadros de diálogo y por lo general dejo que Windows los coloque donde le plazca. De ser estrictamente deseable o necesario colocarlos donde uno desee lo que yo haría es fabricarme mis propios cuadros con un formulario reusable. // Saludos |
Hola Román:
He cambiado la línea que me indicas y funciona bien. Dije que "creía" que fuiste tú el que me pasó el código y lo acabo de buscar para confirmarlo (hilo Varios .. 21-10-03 .. Posición mensajes ....) y efectivamente está indentado pero se habrá perdido al copiar y pegar. Esto ha sido sin ánimo de culpar a nadie, era porque pensaba que el que me lo pasó podría darme mejor la solución, y efectivamente así ha sido, y te estoy muy agradecido por ello. Respecto a futuras consecuencias secundarias negativas que pueda tener no te preocupes, yo las asumo, y tomo nota de las ideas que me das, aunque mi nivel actual de Delphi no creo que me permita hacer mis propios cuadros de diálogo. En realidad solo quiero cambiar de sitio el cuadro en alguna ocasión que pido confirmación para borrar algún registro y me lo tapa, aunque eso también se puede solucionar de otras formas. Muchas gracias por todo. Tomás. |
La franja horaria es GMT +2. Ahora son las 06:03:32. |
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