Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Retardo en configuración del registro (https://www.clubdelphi.com/foros/showthread.php?t=52822)

MAXIUM 31-01-2008 23:46:23

Retardo en configuración del registro
 
Al grano dijo el gallo.

Miren, mi programa debe mostrar la fecha en un formato determinado, para ello al momento de arrancar envio un código al registro para que todo el sistema se adapte a el.

Imaginemos que por defecto se encuentra en formato dd.mm.aa (31.1.8) y yo lo deseo en dd/MM/aaa (31/01/2008)

Entonces modifico el registro:
Código Delphi [-]
   Registro:= Tregistry.Create;
   Registro.RootKey:= HKEY_CURRENT_USER;
   Registro.OpenKey('\Control Panel\International', True);
   Registro.WriteString('sDate', '/');
   Registro.WriteString('sShortDate', 'dd/MM/yyyy');
   Registro.CloseKey;
   Registro.Free;

Todo OK, todo el sistema a cambiado el formato, eso es apreciable mirando el listado de archivos en el explorador.

A continuación leo la fecha actual y la cargo en un Label
Código Delphi [-]
Label1:= DateToStr(Date);

Pero el Label me arroja 31.1.8 :confused: recordar que este código arranca justo después del que modifica el registro.

Si arranco el programa por segunda vez ya no hay problemas, pero esa no es la idea.

Consultas, soluciones, estoy online :rolleyes:

jhonny 31-01-2008 23:53:54

La cosa se debe presentar porque para poder modificar el valor en el registro debes haber iniciado el aplicativo, y este ya tomo el valor que tenia antes de que hicieras el cambio, para esto te propongo la siguiente solución:

Si es necesario que cambies el formato para todo el Windows, pues hazlo como lo estas haciendo pero indicale a tu aplicativo que vas a manejar ese formato... ¿Como se hace?, asi... Delphi tiene unas variables globales para este tipo de cosas, en este caso afectaremos la variable DateSeparator...

Código Delphi [-]
   Registro:= Tregistry.Create;
   Registro.RootKey:= HKEY_CURRENT_USER;
   Registro.OpenKey('\Control Panel\International', True);
   Registro.WriteString('sDate', '/');
   Registro.WriteString('sShortDate', 'dd/MM/yyyy');
   Registro.CloseKey;
   Registro.Free;
   DateSeparator := '/';

En la ayuda explican muy bien el funcionamiento de este tipo de variables globales y listo. Espero te sirva ;).

MAXIUM 31-01-2008 23:58:53

pero me mostraría 31/1/8 y no 31/01/2008, o no :confused:

Aun así el cambio se aplica inmediatamente en Windows, eso lo veo teniendo abierto el explorador de windows en donde aparece la fecha de los archivos, pero no afecta a mi aplicación cuando quiero coger la fecha actual.

Bueno, creo que tendre que pensar en otro metodo:

Código Delphi [-]
     DateSeparator  := '/';
     ShortDateFormat:= 'dd/mm/yyyy';

jhonny 01-02-2008 00:00:15

No creo, pero de ser asi o no podrias jugar con la variable ShortDateFormat.

De hecho si decides no modificar toda la configuración de Windows para que tu programa funcione, solo basta con que le asignes el valor adecuado a la variable ShortDateFormat en el "arranque" de tu aplicativo y el resto de la aplicación trabajara con ese formato, independiente del que tenga configurado el usuario para el resto de sus aplicativos en el panel de control, asi solo tendras que hacer esto:

Código Delphi [-]
ShortDateFormat := 'dd/MM/yyyy';

Y olvidarte del registro de windows para esto. ;)

jachguate 01-02-2008 02:47:58

El "protocolo" para aplicar cambios a la configuración regional, según recuerdo, es después de haber hecho los camibos, enviar a las aplicaciones un mensaje WM_WIN_INI_CHANGE, o algo similar, ahora no tengo delphi a mano para probarlo.

Como te ha dicho antes jhonny, si solo queres aplicar el cambio por tu aplicativo, es mejor que cambies la configuración de este.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 01:29:41.

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