Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Guardar en un INI la fuente con la que se trabaja.

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Guardar en un INI la fuente con la que se trabaja. Responder citando

Hola gente, estoy en los detalles finales de un programa. y me surge el siguiente problema, en la parte de configuracion he puesto un TFontDialog, con el cual se elige la fuente y tamaño de los textos de la aplicacion..

el unico inconveniente que tengo es que no se guradar en el archivo INI que tengo el tipo de fuente y tamaño de las letras. para q al iniciar la aplicacion se configure todo... tambien debo leerlo...

si alguien me ayuda estaria muy agradecido
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¿Te refieres a como grabar un fichero INI o a como obtener los valores para grabar dicho fichero?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Investiga el control TIniFile (no visual).



Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Yo obtengo del TFontDialog la fuente y la guardo en una varialble TFont *Fuente.
Lo que no logro es guardar este valor en el ArchivoINI y mucho menos recuperarlo del archivo...
porque usando la clase TIniFile grabo todas las configuraciones, porque siempre son int,string o variables comunes... pero No se como guardar el TFont que obtengo del dialogo... no se si ahora me entienden...

En el archivo ini se leer y guardar integer, string, float, etc... pero no se como guardar y leer una variable TFont en dicho archivo..
Ahora creo que me entenderan jeje.. un abrazo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Puedes guardar/leer cada propiedad de la fuente por separado:
Código:
ini->WriteString("Seccion", "Font1Name", FontDialog1->Font->Name);
ini->WriteInteger("Seccion", "Font1Size", FontDialog1->Font->Size);
//...etc...

O bien puedes crear una cadena con las distintas propiedades para grabarlo/leerlo en una sola línea. Aquí tienes un par de funciones de ejemplo de como hacerlo:
Código:
// Añadimos las cabeceras: #include<memory>  e  #include<IniFiles.hpp>

//---------------------------------------------------------
void __fastcall IniWriteFont(TIniFile* ini,
    const String Section, const String Ident, TFont* font)
{
    std::auto_ptr<TStringList> sl(new TStringList);

    String style = font->Style.Contains(fsBold) ? "b" : "";
    style += font->Style.Contains(fsItalic)     ? "i" : "";
    style += font->Style.Contains(fsUnderline)  ? "u" : "";
    style += font->Style.Contains(fsStrikeOut)  ? "s" : "";

    sl->Append(font->Name);
    sl->Append(style);
    sl->Append(font->Size);
    sl->Append(ColorToString(font->Color));

    ini->WriteString(Section, Ident, sl->CommaText);
}
//---------------------------------------------------------
void __fastcall IniReadFont(TIniFile* ini,
    const String Section, const String Ident, TFont* font)
{
    std::auto_ptr<TStringList> sl(new TStringList);
    String CommaText = ini->ReadString(Section, Ident, "");
    sl->CommaText = CommaText;
    if (sl->Count == 4)
    {
        TFontStyles style;
        if (sl->Strings[1].Pos("b")) style << fsBold;
        if (sl->Strings[1].Pos("i")) style << fsItalic;
        if (sl->Strings[1].Pos("u")) style << fsUnderline;
        if (sl->Strings[1].Pos("s")) style << fsStrikeOut;

        font->Name = sl->Strings[0];
        font->Style = style;
        font->Size = sl->Strings[2].ToIntDef(font->Size);
        font->Color = StringToColor(sl->Strings[3]);
    }
}

Y un ejemplo de uso:
Código:
    std::auto_ptr<TFontDialog> dlg(new TFontDialog(0));
    std::auto_ptr<TIniFile> ini(new TIniFile("prueba.ini"));
    IniReadFont(ini.get(), "SeccionDePrueba", "FuenteDePrueba", dlg->Font);
    if (dlg->Execute())
    {
        IniWriteFont(ini.get(), "SeccionDePrueba", "FuenteDePrueba", dlg->Font);
            //...
            ini->WriteString("SeccionDePrueba", "Etc", "Prueba");
            //...
    }

Esto guarda en el .ini algo así:
Código:
[SeccionDePrueba]
FuenteDePrueba="Times New Roman",bu,10,clWindowText
Etc=Prueba
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo... justo lo que necesitaba... no me habia dado cuenta de que TFont constaba de partes jeje..

muy agradecido... un abrazo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.