Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2003
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 26-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Tomás comentó:
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,
¿Seguro? Es raro porque yo acostumbro poner código correctamente indentado

De cualquier forma prueba cambiando la línea

Código:
if Buffer = MsgTitle then
por esta otra

Código:
if (Buffer <> '') and (Buffer = MsgTitle) then
en el procedimiento WMActivate.

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
Responder Con Cita
  #3  
Antiguo 27-11-2003
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:57:56.


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