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 

Ayuda, No Entiendo por que da este Error

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Ayuda, No Entiendo por que da este Error Responder citando

Buenas....

He creado un Componente (solo una Casilla blanca)

Código:

class PACKAGE Compnt: public TCustomControl
{

private:
protected:
   virtual void __fastcall Paint(void);

public:
  __fastcall Compnt(TComponent* Owner);

__published:
    __property OnMouseUp;

};end if

//---------------------------------------------------------------------------

void __fastcall Compnt::Paint(void)
{
   //Relleno
   Canvas->Brush->Style = bsSolid;
   Canvas->Brush->Color = clWhite;

    TRect r(ClientRect);
    InflateRect(&r, -(Canvas->Pen->Width/2), -(Canvas->Pen->Width/2));
    r.Right  += (Canvas->Pen->Width + 1) % 2;
    r.Bottom += (Canvas->Pen->Width + 1) % 2;
    Canvas->Rectangle(r);
}



Este Componente lo inserto en un Formulario Form1 que unicamente tiene un Boton que al pulsarlo me habre otro form2 de la manera
Código:
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Form2 = new TForm2(this);

 switch (Form2->ShowModal())
     {
        case mrOk:{break;}
        case mrCancel:{break;}
     }
  delete Form2;
  Form2 = NULL;
}

Este Form2 solo posee un Boton Salir, Una Variable Matriz y un procedimiento que Evita cuando un Flag esta a true que funcione el boton derecho del raton...(Obiamente de esta manera no tiene sentido FOrm2 pero lo he simplificado lo mas posible para facilitar la comprension del problema)

Código:
class TForm2: public TForm
{
__published:   // IDE-managed Components
        TButton *BSalir;
        void __fastcall BSalirClick(TObject *Sender);

public:      // User declarations

  __fastcall TForm2(TComponent* Owner);

private:   // User declarations

  bool Flag;

  short  Matriz[4][14000] ;

  //Mensaje
  void __fastcall AppMessage(MSG &Msg,bool &Handled);

};
//---------------------------------------------------------------------------
extern PACKAGE TFFiltros *FFiltros;



_fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
  Application->OnMessage = AppMessage;
  Flag     = true;
}


void __fastcall TForm2::BSalirClick(TObject *Sender)
{
 ModalResult= mrCancel;
}

//---------------------------------------------------------------------------
//CAPTURAR MENSAJE

void __fastcall TForm2::AppMessage(MSG &Msg, bool &Handled)
{
  if((WM_LBUTTONDBLCLK == Msg.message || WM_LBUTTONDOWN == Msg.message)  && !Flag)
   {
     Handled = true;
   }
}


Ejecuto el programa siguiendo estos Pasos : Pulso Boton del Form Principal Form1 accedo a Form2 pulso Boton Salir de Form2 (se cierra Form2) Hago click sobre el Componente y ...... ERROR y me lo "marca" en el procedimiento Capturar Mensaje (raton) !!!DEL FORM2!!!.......
pero si suprimo del Form2 la Implementacion de la variable Matriz !!FUNCIONA !! (o almenos no da error)

ALGUNA IDEA GRACIAS
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Prueba añadiendo la línea siguiente antes de cerrar o liberar el Form2:

Application->OnMessage = 0;
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Perfecto (Como siempre) Leo.... pero Me puedes explicar por que al eliminar la linea de Inicializar Matriz si funciona (o al menos no da error)

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

Al liberar un objeto no deberías usar nada que se haya declarado dentro de ella, hacerlo provocara resultados impredecibles, quizás te funcione durante un rato, hasta que el programa grabe otra cosa en la misma zona de memoria..
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Ok Gracias
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.