• Viernes 8 de Noviembre de 2024, 23:29

Autor Tema:  No encuentro el fallo... me supera  (Leído 1446 veces)

ruben14

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
No encuentro el fallo... me supera
« en: Lunes 7 de Marzo de 2011, 16:24 »
0
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++
  1.  class TOpciones
  2. private:
  3.      bool   *OpcActivas;  //Vector Booleano        
  4. public :
  5.  
  6.      TOpciones();  /Constructor
  7.      TOpciones(const TOpciones &f);   //Constructor Copia
  8.      TOpciones&operator=(const TOpciones&f);  //Sobrecarga operador Asignacion
  9.     //Procedimientos
  10.      void ActivarOpcion(char NOpc);
  11.      bool LeerOpcion(char NOpc);
  12. };end
  13.  
  14. //---------------------------------------------------------------------------
  15. TOpciones::TOpciones
  16. {
  17.   //Inicializo Vector
  18.  OpcActivas = new bool [10];
  19.  for(int a=0;a<10;a++){OpcActivas[a] = false;}
  20. }
  21.  
  22. //---------------------------------------------------------------------------
  23. TOpciones::TOpciones(const TOpcionesc &f)
  24. {
  25.   *this = f;
  26. }
  27.  
  28. //---------------------------------------------------------------------------
  29. //COPIA
  30. TOpciones & TOpciones::operator=(const TOpciones &f)
  31. {
  32.   if(OpcActivas){delete[]OpcActivas;}
  33.   FiltrosAct = new bool [10];
  34.   memcpy(OpcActivas,f.OpcActivas,10 *sizeof(bool));
  35.   //Copio Vector
  36.   return *this;
  37. }
  38.  
  39. //---------------------------------------------------------------------------
  40. void TFiltrOpc::ActivarOpcion(char NOpc)
  41. {
  42.   OpcActivas[ NOpc] = true;
  43. }
  44.  
  45. //---------------------------------------------------------------------------
  46. bool TFiltrOpc::LeerOpcion(char NOpc)
  47. {
  48.   return OpcActivas[ NOpc];
  49. } 
  50.  

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++
  1. Clase TForm1: PUBLIC TForm
  2. {
  3. private:
  4.      Opciones  * TOpciones;
  5.    ......
  6. }end;
  7.  
  8.  void __fastcall TForm1::FormShow(TObject *Sender)
  9. {
  10.    //inicializo 
  11.   Combo->Clear();
  12.    Combo->Items->Add(0);Combo->Items->Add(1);
  13.    Combo->ItemIndex  = 0;
  14.    Opciones = new TOpciones;
  15. }
  16.  
  17. //---------------------------------------------------------------------------
  18. void __fastcall  TForm1:: ComboChange(TObject *Sender)
  19. {
  20.   GroupBox->Font->Color   = clNavy;
  21.  if(OpcFiltros->LeerOpcion(1))
  22.     {
  23.          BotGenerar->Visible = false;  ///AQUI SE PRODUCE EL ERRORRR
  24.          for(int a=1;a<1000000000;a++){int o=o+1;} //Bucle espera
  25.      }
  26.  
  27.   BotGenerar->Visible = true;
  28. }
  29.  
  30. //---------------------------------------------------------------------------
  31. void __fastcall  TForm1::BotGenerarClick(TObject *Sender)
  32. {
  33.  
  34.   TForm2  *Form2 = new TForm2(this,OpcFiltros);
  35.   switch (Form2->ShowModal())
  36.      {
  37.          case mrOk:
  38.              {
  39.                Opciones = Filtro->LeeOpcionesModifIcadas();  //Leeo Opcione modificadas
  40.                break;
  41.              }
  42.      }
  43.  delete TForm2;
  44. Combo->ItemIndex          = 0;
  45. GroupBox->Font->Color   = clSilver ;
  46. }
  47.  

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++
  1. class TForm2 : public TForm
  2. {
  3.  __published:          TButton *BSalir;
  4.   void __fastcall BSalirClick(TObject *Sender);
  5.  
  6. public:     // User declarations
  7.  
  8.   __fastcall TFFiltros(TComponent* Owner,TOpciones *Op);
  9.  
  10.      TOpciones   *LeeOpcionesModifIcadas();
  11.  
  12. private:    // User declarations
  13.  
  14.    TOpciones  *Opciones2;    //Objeto Opciones cOPIA
  15. };end
  16.  
  17.  
  18. __fastcall TForm2::TForm2(TComponent* Owner,TOpciones *OP)
  19.         : TForm(Owner)
  20. {
  21.   //Asigno Opciones en Filtros
  22.   Opciones2  = new TOpciones(*OP);  //COPIO
  23.   Opciones2->ActivarOpcion(1);        //Modifico Opcion
  24. }
  25.  
  26. //----------------------------------;-----------------------------------------
  27. TFiltrOpc *TFFiltros::LeeOpcionesModifIcadas()
  28. {
  29.   return Opciones2;
  30. }
  31.  
  32. //---------------------------------------------------------------------------
  33. void __fastcall TFFiltros::BSalirClick(TObject *Sender)
  34. {
  35.  ModalResult= mrOk;
  36. }
  37.  
  38.  

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++
  1. Opciones = Filtro->LeeOpciones();  //Leeo Opcione modificadas
  2.  


Si elimino la siguiente linea del mismo procedimiento tambien funciona
Código: C++
  1. GroupBox->Font->Color   = clSilver
  2.  

Alguna ide Gracias