Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-06-2004
melanthea melanthea is offline
Miembro
 
Registrado: jun 2004
Posts: 19
Poder: 0
melanthea Va por buen camino
Habilitar/Deshabilitar botones permanentemente

Bueno ya me vais a echar del foro por pesada... Pero ya que he descubierto un lugar donde gente que sabe de Builder puede echarme un cable, tendré que aprovecharlo verdad?

En mi aplicacion tengo que deshabilitar unos botones A y B cuando el usuario pulsa uno del mismo formulario (C), y volver a habilitarlos cuando pulsa otro botón pero de un formulario distinto (D). Hasta ahí lo sé hacer, bastaría con preceder el nombre del formulario antes del nombre del botón y cambiar la propiedad enabled verdad?

El hecho es que quiero que este cambio se me mantenga una vez cerrada la aplicación. Es decir, que si los botones A y B tienen el enabled a false, que se mantenga para las sucesivas veces que se ejecuta la aplicación, y no vuelvan a tener el enabled a true hasta que pulse C, y que entonces se me mantengan así hasta que se vuelva a pulsar D. No sé si me explico con claridad...

No tengo ni idea de cómo se maneja el registro de Windows (que me comentaron que se podía hacer así), así que estaba pensando si se podría hacer con otra cosa que no fuese eso. Pensé en variables globales, pero en cuanto cierre la aplicación pierden su valor...

Si alguien puede orientarme en este tema, desde ya muchas gracias


No puedo poner
Responder Con Cita
  #2  
Antiguo 15-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
De antemano te comento que no conozco C++ en profundidad, pero esto lo hice funcionar:
Código:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <registry.hpp>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    const String Regkey = "\\software\\Mi Marca\\Mi Soft\\";

    TRegistry *MyRegistry = new TRegistry();
    try {
      MyRegistry->RootKey = HKEY_LOCAL_MACHINE;
   	  MyRegistry->OpenKey(Regkey, True);
      Button1->Enabled = MyRegistry->ReadBool(Button1->Name);
   	}
   	catch(ERegistryException &E) {
 	  ShowMessage(E.Message);
      delete MyRegistry;
      return;
    }
   	delete MyRegistry;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    const String Regkey = "\\software\\Mi Marca\\Mi Soft\\";

    TRegistry *MyRegistry = new TRegistry();
    try {
      MyRegistry->RootKey = HKEY_LOCAL_MACHINE;
   	  MyRegistry->OpenKey(Regkey, True);
      MyRegistry->WriteBool(Button1->Name, Button1->Enabled);
   	}
   	catch(ERegistryException &E) {
 	  ShowMessage(E.Message);
      delete MyRegistry;
      return;
    }
   	delete MyRegistry;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Button1->Enabled = !Button1->Enabled;
}
//---------------------------------------------------------------------------
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 17-06-2004
melanthea melanthea is offline
Miembro
 
Registrado: jun 2004
Posts: 19
Poder: 0
melanthea Va por buen camino
Hola:
He copiado y pegado el código que me pones, pero me lanza una excepción diciendo que no puede leer datos del botón 1 (exactamente no me acuerdo del mensaje, es que no estoy en casa ahora mismo...)
Lo intentaré de nuevo, pero bueno, si alguien sabe por qué me puede ocurrir esta excepción, que me lo comente por favor.
Un saludo
Responder Con Cita
  #4  
Antiguo 17-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Lo va a lanzar la primera ejecución, yo te recomendaría que preguntes si existe la clave o el valor a buscar, y si existe leer el valor.

PD: ¿Buscaste algún componente tipo el TFormStorage de las RxLibs para automatizar esto y no escribir código para cada form.?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 17-06-2004
melanthea melanthea is offline
Miembro
 
Registrado: jun 2004
Posts: 19
Poder: 0
melanthea Va por buen camino
Yo es que soy una novata en esto del Builder, así que ese componente que me comentas pues ni idea... Pero bueno, sólo tego qe hacerlo para una Form, así que supongo que en cuanto logre que me funcione, ya tendré el problema resuelto...
De todas maneras, si no lo consigo, probablemente acuda a vosotros otra vez
Muchísimas gracias por tu tiempo.
Un saludo
Responder Con Cita
  #6  
Antiguo 17-06-2004
melanthea melanthea is offline
Miembro
 
Registrado: jun 2004
Posts: 19
Poder: 0
melanthea Va por buen camino
Hola!

He intentado hacerlo con un archivo ini de la siguiente manera:

Guardar configuración

Código:
TIniFile *Conf=new TIniFile("c:\\archivo.ini");
Conf->WriteBool("Botones", "Boton C",Button1->Enabled);
delete Conf;

Leer configuración
Código:
TIniFile *Conf=new TIniFile("c:\\archivo.ini");
corresponda
Conf->ReadBool("Botones", "Boton C",true);
delete Conf;

El caso es que el archivo ini me lo crea bien, con los valores correctos, pero a la hora de ejecutar la aplicación, el botón siempre me aparece habilitado, independientemente de lo que indique el archivo ini...

Yo lo que hago es compilar, y una vez que tengo la aplicación, le doy a un botón para que se me deshabilite el botón 1. Luego cierro, y vuelvo a ejecutar la aplicación, (sin compilar de nuevo), y me sale el botón 1 habilitado siempre...

Qué estoy haciendo mal???
Un saludo
Responder Con Cita
  #7  
Antiguo 17-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
¿En qué eventos estas poniendo este código?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 18-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Y no haria falta asignar el valor leido a la propiedad:

Código:
Leer configuración
  TIniFile *Conf=new TIniFile("c:\\archivo.ini");
  Button1->Enabled = Conf->ReadBool("Botones", "Boton C",true);
  delete Conf;
También te recomiendo aprender a utilizar la etiqueta [ code ] para publicar trozos de código.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 18-06-2004
melanthea melanthea is offline
Miembro
 
Registrado: jun 2004
Posts: 19
Poder: 0
melanthea Va por buen camino
Claro!
Ahí estaba el fallo... Qué tonta!
Ya me funciona perfectamente, poniendo el código anterior en los eventos OnCreate y OnClose de la form... Pero si tengo que hacerlo dentro de un marco (frame), me serviría ponerlo en los eventos OnEnter y OnExit?
Muchas gracias por vuestra ayuda y perdón por no poner en el otro mensaje el código entre las etiquetas.
Un saludo
Responder Con Cita
  #10  
Antiguo 18-06-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por melanthea
...me serviría ponerlo en los eventos OnEnter y OnExit?
Todo depende de lo que quieras hacer, no creo que sea lo correcto para lo que has enunciado anteriormente. Los frames no tienen evento OnCreate y OnDestroy, pero si puedes sobreescribir los constructores y destructores para agregar esta funcionalidad.
PD: Te recomiendo leer la ayuda para ver la funcionalidad de cada evento.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:39:06.


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
Copyright 1996-2007 Club Delphi