PDA

Ver la Versión Completa : Cambiar Configuracion Regional desde Delphi


JuanchoArg
09-10-2008, 22:09:45
Hola Amigos!!!
Necesito que mi aplicacion cambie la configuracion regional de la PC , mas precisamente el simbolo decimal y el separador de miles. Cómo se hace esto desde delphi? Ayuda pleaseeee!!!

Un abrazo y gracias!!!

jhonny
09-10-2008, 22:21:05
No es necesario que cambies la configuración regional de Windows para indicarle a tu aplicativo con que símbolos debe trabajar... ya que solo es cuestión de cambiar los valores de ciertas variables globales, como los son, por ejemplo:

DecimalSeparator := '.';
ThousandSeparator := ',';

Busca mas información en la ayuda, sobre dichas variables globales, pues hay mas...

Espero te sirva ;).

JuanchoArg
10-10-2008, 01:39:39
Gracias amigo, pero necesito que cambie la configuracion del equipo y no solo la de mi aplicacion. Tienes idea de como hacerlo?

Saludos

jhonny
10-10-2008, 14:01:53
Gracias amigo, pero necesito que cambie la configuracion del equipo y no solo la de mi aplicacion. Tienes idea de como hacerlo?

Saludos


Entonces apuesto que el siguiente hilo te ayudara http://www.clubdelphi.com/foros/showpost.php?p=280008&postcount=4

Delphius
10-10-2008, 14:10:58
JuanchoArg,
Debes tener en cuenta que los cambios en la configuración regional pueden afectar a otros sistemas que se empleen.
No es bueno cambiar la configuración sino se tiene la certeza de que algo puede verse afectado.

Sobre todo si se altera el uso de simbolos decimal y el separador de miles. Un ejemplo de un software que se verá afectado por algún cambio es Excel.
Imaginate como se puede llegar a comportar un sistema de crédito, un sistema de puesto de venta.
No es lo mismo 800.000 que 800,000;)

No más te recomiendo que analices bien esto. No vaya a ser cosa que después te des con algunas sorpresitas.

Saludos,

JuanchoArg
10-10-2008, 19:58:36
Hola Delphius, se cuales son las consecuencias de hacer eso. El tema es que le queria ahorar a un usuario (él me lo pidió) tener que hacer ese cambio en la configuracion regional en forma manual agregandola a una barra flotante que he armado en delphi con aplicaciones varias.
Hay un sistema de la AFIP, el SIAP, que le cambia la configuracion regional y cuando sale de tal sistema no la regresa a valores anteriores y todos los sistemas se ven afectados, precisamente el excel , como decias.
Debe haber alguna forma de acceder a estos valores en el registro de windows y modificarlos con delphi. Si no me sale aqui tendré que hacerlo con VB :(.

Saludos Cordiales.

jhonny
10-10-2008, 20:25:01
Hola Delphius, se cuales son las consecuencias de hacer eso. El tema es que le queria ahorar a un usuario (él me lo pidió) tener que hacer ese cambio en la configuracion regional en forma manual agregandola a una barra flotante que he armado en delphi con aplicaciones varias.
Hay un sistema de la AFIP, el SIAP, que le cambia la configuracion regional y cuando sale de tal sistema no la regresa a valores anteriores y todos los sistemas se ven afectados, precisamente el excel , como decias.
Debe haber alguna forma de acceder a estos valores en el registro de windows y modificarlos con delphi. Si no me sale aqui tendré que hacerlo con VB :(.

Saludos Cordiales.

Ya viste el hilo que te referencie en mi respuesta anterior? :eek:

JuanchoArg
10-10-2008, 21:20:47
Hola Jhonny, si lo vi, pero sinceramente no lo entendí del todo bien. De todos modos ya lo hice en VB, salió mas rapido. Gracias por el interés.

Saludos amigo.

ingabraham
15-07-2010, 00:47:58
JuanchoArg,
Debes tener en cuenta que los cambios en la configuración regional pueden afectar a otros sistemas que se empleen.
No es bueno cambiar la configuración sino se tiene la certeza de que algo puede verse afectado.

Sobre todo si se altera el uso de simbolos decimal y el separador de miles. Un ejemplo de un software que se verá afectado por algún cambio es Excel.
Imaginate como se puede llegar a comportar un sistema de crédito, un sistema de puesto de venta.
No es lo mismo 800.000 que 800,000;)

No más te recomiendo que analices bien esto. No vaya a ser cosa que después te des con algunas sorpresitas.

Saludos,

yo necesito eso por q tengo otro software con diferente configuracion regional
quiero q la cambie por la mia a
dd/mm/aaaa
12.526,54

y al cerrar mi aplicacion cambie a.

aaaa.mm.dd
15,526.54

me puedes colaborar compañero ?

MAXIUM
15-07-2010, 04:23:56
Al abrir y/o cerrar tu aplicación, debes manipular el registro de Windows, eso es todo.

ingabraham
15-07-2010, 17:26:44
Al abrir y/o cerrar tu aplicación, debes manipular el registro de Windows, eso es todo.
como hago esto desde delphi

MAXIUM
16-07-2010, 06:52:31
Ok, de partida esta el evento OnCreate y OnClose

Luego esta la ruta en el registro de Windows con todos estos parametros, tu modificas los que convengan:

[HKEY_CURRENT_USER\Control Panel\International]
"iCountry"="56"
"iCurrDigits"="2"
"iCurrency"="2"
"iDate"="1"
"iDigits"="2"
"iLZero"="1"
"iMeasure"="0"
"iNegCurr"="9"
"iTime"="1"
"iTLZero"="0"
"Locale"="0000340A"
"s1159"=""
"s2359"=""
"sCountry"="Chile"
"sCurrency"="$"
"sDate"="-"
"sDecimal"=","
"sLanguage"="ESL"
"sList"=","
"sLongDate"="dddd, dd' de 'MMMM' de 'yyyy"
"sShortDate"="dd-MM-yyyy"
"sThousand"="."
"sTime"=":"
"sTimeFormat"="H:mm:ss"
"iTimePrefix"="0"
"sMonDecimalSep"=","
"sMonThousandSep"="."
"iNegNumber"="1"
"sNativeDigits"="0123456789"
"NumShape"="1"
"iCalendarType"="1"
"iFirstDayOfWeek"="6"
"iFirstWeekOfYear"="0"
"sGrouping"="3;0"
"sMonGrouping"="3;0"
"sPositiveSign"=""
"sNegativeSign"="-"

Y como ejemplo:

USES Registry;


var Reg: TRegistry;
begin
// Creamos un objeto para manejar el registro
Reg := TRegistry.Create;

// Guardamos las opciones
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey( '\Control Panel\International', True ) then
begin
Reg.WriteString( 'sShortDate', 'dd/mm/aaaa');
Reg.CloseKey;
end;
finally
Reg.Free;
end;

ingabraham
27-07-2010, 15:50:35
si coloco
Reg.WriteString( 'sShortDate', 'aaaa-dd-mm');
o como es:
Reg.WriteString( 'sShortDate', 'yyyy-dd-mm');

en el dbgrid me sigue apareciendo el formato estandar de windows

look
27-07-2010, 17:54:07
Hola Amigos!!!
Necesito que mi aplicacion cambie la configuracion regional de la PC , mas precisamente el simbolo decimal y el separador de miles. Cómo se hace esto desde delphi? Ayuda pleaseeee!!!

Un abrazo y gracias!!!

WinExec(Pchar('rundll32.exe shell32,Control_RunDLL intl.cpl,,/f:"'+ExtractFilePath(Application.ExeName)+'regopts.txt'+'"'), SW_HIDE);


en el txt:
[RegionalSettings]
UserLocale =0480a
UserLocale_DefaultUser =0480a

el 0480a es el codigo que quiero cambiar, en este caso es para el de mi pais.

aqui (http://msdn.microsoft.com/en-us/library/0h88fahh%28VS.85%29.aspx)una lista

ingabraham
28-07-2010, 20:26:41
Código Delphi [-] (http://www.clubdelphi.com/foros/#)
WinExec(Pchar('rundll32.exe shell32,Control_RunDLL intl.cpl,,/f:"'+ExtractFilePath(Application.ExeName)+'regopts.txt'+'"'), SW_HIDE);





en el txt:
[RegionalSettings]
UserLocale =0480a
UserLocale_DefaultUser =0480a

el 0480a es el codigo que quiero cambiar, en este caso es para el de mi pais.

aqui (http://msdn.microsoft.com/en-us/library/0h88fahh%28VS.85%29.aspx)una lista

da compa no tengo ni idea que significa esto y para q es.

look
29-07-2010, 04:59:10
da compa no tengo ni idea que significa esto y para q es.

esto:

WinExec(Pchar('rundll32.exe shell32,Control_RunDLL intl.cpl,,/f:"'+ExtractFilePath(Application.ExeName)+'regopts.txt'+'"'),

lo puedes meter en un boton, si te fijas hace referencia a un archivo regopts.txt, este debe ir en la carpeta en donde esta el exe de tu project, tambien es dentro de este que va el codigo de region (http://msdn.microsoft.com/en-us/library/0h88fahh%28VS.85%29.aspx);

dentro de regopts.txt :
[RegionalSettings]
UserLocale =0480a
UserLocale_DefaultUser =0480a

con eso puedes cambiar la configuracion reginal de tu ordenador desde delphi

ingabraham
29-07-2010, 18:17:19
osea yo quiero q me ponga el formato dd/mm/aaaa
separador mil .
separador decimal ,

con esto lo hago?

ingabraham
29-07-2010, 18:26:13
como es correcto

Reg.WriteString( 'sShortDate', 'aaaa-dd-mm');
o,
Reg.WriteString( 'sShortDate', 'yyyy-dd-mm');

ingabraham
29-07-2010, 18:55:35
hola un amigo me dio este codigo, como lo puedo adaptar para cambiar la fecha tambien.
q al arrancar mi programa cambie a
dd/mm/aaaa
y al salir
aaaa.mm.dd

en el create del datamodulo y en el destroy

procedure SetDecimalSeparator(Ch: Char);
var
DefLCID: LCID;
Buffer: LPSTR;
begin
Application.UpdateFormatSettings := True;
StrPCopy(Buffer, Ch);
DefLCID := GetThreadLocale;
if SetLocaleInfo(DefLCID, LOCALE_SDecimal, Buffer) then
DecimalSeparator := StrPas(Buffer)[1];
Application.UpdateFormatSettings := False;
end;
procedure SetMoneyDecimalSeparator(Ch: Char);
var
DefLCID: LCID;
Buffer: LPSTR;
begin
Application.UpdateFormatSettings := True;
StrPCopy(Buffer, Ch);
DefLCID := GetThreadLocale;
if SetLocaleInfo(DefLCID, LOCALE_SMONDECIMALSEP, Buffer) then
DecimalSeparator := StrPas(Buffer)[1];
Application.UpdateFormatSettings := False;
end;

procedure SetListSeparator(Ch: Char);
var
DefLCID: LCID;
Buffer: LPSTR;
begin
Application.UpdateFormatSettings := True;
StrPCopy(Buffer, Ch);
DefLCID := GetThreadLocale;
if SetLocaleInfo(DefLCID, LOCALE_SLIST, Buffer) then
DecimalSeparator := StrPas(Buffer)[1];
Application.UpdateFormatSettings := False;
end;



encontre esta pagina de los codigos :
http://msdn.microsoft.com/en-us/library/dd464799(v=VS.85).aspx