Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   guardar opciones de una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=84941)

andres_89 01-01-2014 22:28:16

guardar opciones de una aplicación
 
Hola a todos y Feliz año!

siempre he practicado con archivos únicos ejecutables, pero ahora quiero entrar a proyectos complejos, y tengo una duda de como guardar mis opciones:

cuando corro mi ejecutable y juego con opciones de "CheckBox" para calcular mi resultado las opciones se guardan normalmente en ese momento hasta que finalize mi ejecutable, pero no encuentro una opción que me permita guardar lo que marco en "CheckBox" despues de cerrar mi ejecutable y reiniciar mi S.O, osea que tenga guardado las opciones marcadas de "CheckBox" aún despues de cerrar mi unico ejecutable ".exe", he revisado tutoriales pero todos me muestran como marcar y ejecutar pero ninguno de como guardar mis opciones, para que despues cuando vuelva a ejecutar ya no necesite marcar de nuevo o pueda cambiar.

Lo que se me viene a la cabeza es guardar mis opciones en un .txt y de ahi levantarlo y según lo que tenga en el .txt marcar mis casillas CheckBox, o habrá una forma más profesional de hacerlo?


Saludos.

ecfisa 02-01-2014 01:06:21

Hola andres_89.

Podes guardar las opciones en un archivo .ini o en el registro de windows. Siendo esta última la opción mas usada actualmente, te pongo un ejemplo de como implementarla:
Código:

...
#include <Registry.hpp>

void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
  TRegistry *rg = new TRegistry(KEY_ALL_ACCESS);

  rg->RootKey = HKEY_CURRENT_USER;
  if (rg->OpenKey("Software\\TuPrograma\\frmMain", true)) {
    for (int i=0; i < ControlCount; i++)
      if (Controls[i]->ClassNameIs("TCheckBox")) {
        TCheckBox *cb = static_cast <TCheckBox*> (Controls[i]);
        try {
          cb->Checked = rg->ReadBool(cb->Name);
        } catch(...) {
          cb->Checked = false;
        }
      }
    rg->CloseKey();
  }
  delete rg;
}

...

void __fastcall TfrmMain::FormDestroy(TObject *Sender)
{
 TRegistry *rg = new TRegistry(KEY_ALL_ACCESS);

  rg->RootKey = HKEY_CURRENT_USER;
  if (rg->OpenKey("Software\\TuPrograma\\frmMain", true)) {
    for (int i=0; i < ControlCount; i++)
      if (Controls[i]->ClassNameIs("TCheckBox")) {
        TCheckBox *cb = static_cast <TCheckBox*> (Controls[i]);
        rg->WriteBool(cb->Name, cb->Checked);
      }
    rg->CloseKey();
  }
  delete rg;
}

Donde "TuPrograma" es el nombre con que quieras simbolizar a tu aplicación y "frmMain" el nombre del formulario en questión.

Saludos :)

andres_89 02-01-2014 19:39:58

Gracias
 
Hola ecfisa;

Gracias, haré las pruebas y comentaré como me fue.

Saludos.


La franja horaria es GMT +2. Ahora son las 14:17:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi