Programación General > C++ Builder

 No encuentro el fallo... me supera

(1/1)

ruben14:
Buenas llevo una semana intentando dar con un error y no doy...Para la consulta  he reducido el codigo lo mas que he podido para hacerlo mas legible, por lo cual la Aplicacion carece totalmente de sentido pero escenifica perfectamente el problema.

He creado una Clase Opciones

--- Código: C++ --- class TOpcionesprivate:     bool   *OpcActivas;  //Vector Booleano        public :      TOpciones();  /Constructor     TOpciones(const TOpciones &f);   //Constructor Copia     TOpciones&operator=(const TOpciones&f);  //Sobrecarga operador Asignacion    //Procedimientos     void ActivarOpcion(char NOpc);     bool LeerOpcion(char NOpc);};end //---------------------------------------------------------------------------TOpciones::TOpciones{  //Inicializo Vector OpcActivas = new bool [10]; for(int a=0;a<10;a++){OpcActivas[a] = false;}} //---------------------------------------------------------------------------TOpciones::TOpciones(const TOpcionesc &f){  *this = f;} //---------------------------------------------------------------------------//COPIATOpciones & TOpciones::operator=(const TOpciones &f){  if(OpcActivas){delete[]OpcActivas;}  FiltrosAct = new bool [10];  memcpy(OpcActivas,f.OpcActivas,10 *sizeof(bool));  //Copio Vector  return *this;} //---------------------------------------------------------------------------void TFiltrOpc::ActivarOpcion(char NOpc){  OpcActivas[ NOpc] = true;} //---------------------------------------------------------------------------bool TFiltrOpc::LeerOpcion(char NOpc){  return OpcActivas[ NOpc];}  
Tengo tengo un Form1 que contiene un TCOMBOBOX (0,1) , un TBOTON (BotGenerar)  un TGROUPBOX (vacio)  ademas posee una  Variable  Objeto TOpciones ....


--- Código: C++ ---Clase TForm1: PUBLIC TForm{private:     Opciones  * TOpciones;   ......}end;  void __fastcall TForm1::FormShow(TObject *Sender){   //inicializo   Combo->Clear();   Combo->Items->Add(0);Combo->Items->Add(1);   Combo->ItemIndex  = 0;   Opciones = new TOpciones;} //---------------------------------------------------------------------------void __fastcall  TForm1:: ComboChange(TObject *Sender){  GroupBox->Font->Color   = clNavy; if(OpcFiltros->LeerOpcion(1))    {         BotGenerar->Visible = false;  ///AQUI SE PRODUCE EL ERRORRR         for(int a=1;a<1000000000;a++){int o=o+1;} //Bucle espera     }   BotGenerar->Visible = true;} //---------------------------------------------------------------------------void __fastcall  TForm1::BotGenerarClick(TObject *Sender){   TForm2  *Form2 = new TForm2(this,OpcFiltros);  switch (Form2->ShowModal())     {         case mrOk:             {               Opciones = Filtro->LeeOpcionesModifIcadas();  //Leeo Opcione modificadas               break;             }     } delete TForm2;Combo->ItemIndex          = 0;GroupBox->Font->Color   = clSilver ;} 
Por ultimo tengo un Form2 (al que accedo desde Form1) donde  le   paso  como parametro el puntero TOpciones del que hago una copia la cual modifico,  y salgo al Pulsar un  Boton Salir que posee....


--- Código: C++ ---class TForm2 : public TForm{ __published:          TButton *BSalir;  void __fastcall BSalirClick(TObject *Sender); public:     // User declarations   __fastcall TFFiltros(TComponent* Owner,TOpciones *Op);      TOpciones   *LeeOpcionesModifIcadas(); private:    // User declarations    TOpciones  *Opciones2;    //Objeto Opciones cOPIA};end  __fastcall TForm2::TForm2(TComponent* Owner,TOpciones *OP)        : TForm(Owner){  //Asigno Opciones en Filtros  Opciones2  = new TOpciones(*OP);  //COPIO   Opciones2->ActivarOpcion(1);        //Modifico Opcion} //----------------------------------;-----------------------------------------TFiltrOpc *TFFiltros::LeeOpcionesModifIcadas(){  return Opciones2;} //---------------------------------------------------------------------------void __fastcall TFFiltros::BSalirClick(TObject *Sender){ ModalResult= mrOk;}  
Ejecuto la aplicacion...En Form1 Selecciono en el ComboBox el valor uno, se muestra en pantalla el boton Generar y lo "acciono" Se habre el Form2 al que se le pasa el parametro puntero Opciones, al cual le hago una copia  que modifico automativamente.Pulso el boton salir..Salgo del Form2 Se muestra el Form1 que Lee el Objeto Opciones modificado.

El Problema Surge hora... vuelvo a seleccionar el valor 1 del ComboBox y !!DESAPARECE DE LA PANTALLA EL TGROUPBOX !!!

Creo que el problema tiene que ver con el puntero OPciones ya que si elimino la siguiente linea del procedimiento BotGenrear de la classe Form1 funciona

--- Código: C++ ---Opciones = Filtro->LeeOpciones();  //Leeo Opcione modificadas 

Si elimino la siguiente linea del mismo procedimiento tambien funciona

--- Código: C++ ---GroupBox->Font->Color   = clSilver  
Alguna ide Gracias

Navegación

[0] Índice de Mensajes

Ir a la versión completa