Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Impresoras HP vuelven la fecha de delphi a dd/MM/YY (https://www.clubdelphi.com/foros/showthread.php?t=57790)

amadis 27-06-2008 13:57:49

Impresoras HP vuelven la fecha de delphi a dd/MM/YY
 
Que tal Compañeros.

Quería comentarler lo que he observado hace un tiempo.

En un programa que tengo desarrollado utilizo todas las fechas dentro de delphi en formaro yy/MM/dd (año/mes/dia).

Y he observado que al encender impresoras HP multifunciones o laser si el programa está abierto automáticamente me invierte todos los campos de fecha a la forma dia/mes/año.

¿a alguien le ha pasado lo mismo?

Saludos y Exitos

luisgutierrezb 27-06-2008 15:38:21

La verdad a mi no me ha pasado nada similar, aqui en el trabajo el 95% de las impresoras son hp, desde chiquitas hasta multifuncionales grandes pasando por las laser y no hemos tenido ese problema...

amadis 27-06-2008 16:03:30

Pero el problema es cuando trabajas en el programa con la fecha en fotmaro año/mes/dia

Yo lo cambio utilizando longdateformat := 'YY/MM/dd'
Y manualmente en componentes como el DateTimePicker asignandole el formato que quiero para la fecha.

Pero si llego a tener el programa abirto y se prende alguna impresora HP multifucion o laser, la fecha vuelve a Dia/mes/año

amadis 27-06-2008 20:01:15

otro detalle
 
Me acabo de parcatar que en tiempo de diseño, con el IDE de delphi abierto, al encender o apagar la impresora HP multifuncion (1210 y 1410) o laser (1018 y 1020) se ve un refresco en la pantalla del IDE.

¿a nadie le pasa lo mismo?

roman 27-06-2008 20:50:11

No sé si tenga algo que ver, pero da la impresión de que la impresora está cambiando el formato de fecha a nivel de sistema. Cuando una aplicación hace esto (que, por cierto, no debería hacer) suele avisar al sistema mandando un mensaje WM_SETTINGCHANGE a todas las ventanas (lo cual podría justificar el parpadeo que notas). Esto podrías comprobarlo añadiendo un manejador para este evento en tu formulario principal:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure WMSettingChange(var Message: TMessage); message WM_SETTINGCHANGE;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSettingChange(var Message: TMessage);
begin
  ShowMessage('Setting changed');
end;

Si es el caso, entonces podrías remediarlo reestableciendo tu formato cuando recibas este mensaje.

// Saludos

amadis 28-06-2008 15:13:25

Muchas Gracias Roman

Ese manejador efectivamente me detecta un cambio la encender o apagar la impresora.

Te pregunto porque no encontre mas al respecto de WMSettingChange.

¿que tipos de cambios detecta este procedimiento?. Pregunto para estar seguro de si puedo usarlo para solucionar mi problema.

Desde ya Muchas Gracias!

roman 28-06-2008 21:16:43

La información acerca de este mensaje la puedes encontrar en la ayuda de Windows SDK que se incluye con Delphi. Busca por WM_SETTINGCHANGE.

El mensaje puede mandarse por muchas razones. Puede mandarlo el propio sistema cuando se altera algún parámetro usando la función SystemParametersInfo, o bien una aplicación cuando altera algún parámetro de formato como en este caso.

La diferencia (entre si lo manda el sistema o una aplicación) se detecta examinando Message.WParam en el manejador del mensaje; si es distinto de cero, se supone que es porque el mensaje lo mandó el sistema. Sería interesante ver quién lo está mandando; podría ser el propio driver de la impresora aunque suena raro pues dices que sucede con varias impresoras y como te ha mencionado Luis, no es algo que suela suceder.

Una posibilidad que se me ocurre es que el driver de la impresora no esté en el mismo lenguaje que el sistema, y quizá cuando enciendes la impresora, el sistema trata de ajustar reestableciendo los valores y ocasionando el cambio que observas. Habría que ver en tal caso, si puedes reemplazar el driver por uno que coincida con el idioma del sistema.

De todas maneras, creo que no debería preocuparte qué otras razones generan el mensaje WM_SETTINGCHANGE; a fin de cuentas tú requieres un valor determinado para LongDateFormat, sin importar qué lo está alterando, así que bastaría que en el manejador le vuelvas a poner el valor deseado.

// Saludos


La franja horaria es GMT +2. Ahora son las 01:36:04.

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