Professional Documents
Culture Documents
CCD
Buscar
Trucos
Trabajo
Foros
Registrarse
Enlaces
Miembros
C ontrasea
Calendario
Gua de estilo
Iniciar Sesin
Temas de Hoy
Herramientas
Desplegado
#1
10-10-2012
dec
Moderador
Hola,
Slo quera aportar algo que quiz sea de conocimiento comn. Se trata de trabajar con archivos INI en una codificacin de caracteres
diferente a la predeterminada, esto es, "ANSI". La clase "TIniFile" (Implementada en la unidad "IniFiles") no soporta (a fecha de hoy) otra
codificacin diferente a la referida, empero, en la misma unidad que dicha clase existe otra de nombre "TMemIniFile", que nos permite
especificar, desde el mismo constructor, la codificacin que queremos utilizar al trabajar con el archivo INI.
Supn que ests usando un archivo INI para guardar "bsquedas" que realiza el usuario de tu programa. Si tu programa usa una versin
Delphi con soporte para Unicode (a partir de Delphi 2009) el usuario podr utilizar caracteres Unicode para realizar sus bsquedas, y, el
archivo INI deber guardar dichos caracteres, de manera que no se "pierdan" al tener que reducirse a la codificacin "ANSI". Pues bien, este
pdfcrowd.com
es un ejemplo en el que la clase "TMemIniFile" nos vendr de perillas. Por lo dems, esta clase "funciona" exactamente igual a "TIniFile".
Si acaso aadir un pequeo detalle ms que, al menos en Delphi XE2, ocurre. La clase "TIniFile" "guarda" el archivo INI cuando se libera el
objeto correspondiente, sin embargo, la clase "TMemIniFile" no lo hace as. Pero, para esto existe un mtodo (en ambas clases adems) de
nombre "UpdateFile", que, podrs utilizar para que la clase "TMemIniFile" actualize el archivo INI con el que est asociada. Tambin me
gustara aadir que debers usar (tal vez no estrictamente, pero, s por lo general, me atrevera a decir) la misma codificacin de
caracteres, tanto cuando abras el archivo INI para leerlo, como cuando escribas en el mismo.
A continuacin un sencillo ejemplo de uso de la clase "TMemIniFile":
Cdigo Delphi [-]
class procedure TInterfaceConfig.LoadConfig();
begin
with TMemIniFile.Create( self.GetInterfaceIniFilePath(), TEncoding.Unicode ) do
try
Language := ReadString( I18N_SECTION, LANGUAGE_VALUE, DEFAULT_LANGUAGE );
ActiveTheme := ReadString( THEME_SECTION, NAME_VALUE, DEFAULT_THEME_NAME );
EditorTab := ReadInteger( OPTIONSFORM_SECTION, EDITOR_TAB_VALUE, DEFAULT_EDITOR_TAB );
OptionsTab := ReadInteger( OPTIONSFORM_SECTION, OPTIONS_TAB_VALUE, DEFAULT_OPTIONS_TAB );
MainFormTop := ReadInteger( MAINFORM_SECTION, TOP_VALUE, DEFAULT_MAINFORM_TOP );
MainFormLeft := ReadInteger( MAINFORM_SECTION, LEFT_VALUE, DEFAULT_MAINFORM_LEFT );
MainFormWidth := ReadInteger( MAINFORM_SECTION, WIDTH_VALUE, DEFAULT_MAINFORM_WIDTH );
MainFormHeight := ReadInteger( MAINFORM_SECTION, HEIGHT_VALUE, DEFAULT_MAINFORM_HEIGHT );
MainFormWindowState := ReadInteger( MAINFORM_SECTION, WINDOW_STATE_VALUE, DEFAULT_MAINFORM_WINDOW_STATE );
finally
Free();
end;
end;
class procedure TInterfaceConfig.SaveConfig();
begin
with TMemIniFile.Create( self.GetInterfaceIniFilePath(), TEncoding.Unicode ) do
try
WriteString( I18N_SECTION, LANGUAGE_VALUE, Language );
WriteInteger( MAINFORM_SECTION, TOP_VALUE, MainFormTop );
WriteInteger( MAINFORM_SECTION, LEFT_VALUE, MainFormLeft );
WriteInteger( MAINFORM_SECTION, WIDTH_VALUE, MainFormWidth );
WriteInteger( MAINFORM_SECTION, HEIGHT_VALUE, MainFormHeight );
WriteInteger( MAINFORM_SECTION, WINDOW_STATE_VALUE, MainFormWindowState );
WriteString( THEME_SECTION, NAME_VALUE, TStyleManager.ActiveStyle.Name );
pdfcrowd.com
Espero que este truco pueda resultar til a alguien en algn momento.
Normas de Publicacin
no
no
no
no
Puedes
Puedes
Puedes
Puedes
Saltar a Foro
Trucos
Ir
Temas Similares
Tema
Autor
Foro
Respuestas
ltimo mensaje
elcigarra
Varios
10-05-2013 10:50:43
C handra_
Firebird e Interbase
14
05-11-2010 20:27:44
UTF8 La maldicion
Softweb
Varios
25-03-2010 13:45:39
matabyte
Windows
01-05-2008 01:40:13
pdfcrowd.com
matabyte
Windows
01-05-2008 01:40:13
xio
Internet
29-10-2007 18:10:19
-- Espaol 3.6.7
pdfcrowd.com