| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 24 Feb, 2011 5:51 pm Asunto: Ayuda, No Entiendo por que da este Error |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 24 Feb, 2011 9:56 pm Asunto: |
|
|
Prueba añadiendo la línea siguiente antes de cerrar o liberar el Form2:
Application->OnMessage = 0; |
|
| Volver arriba |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Jue 24 Feb, 2011 10:16 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 24 Feb, 2011 10:24 pm Asunto: |
|
|
| 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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Vie 25 Feb, 2011 7:45 am Asunto: |
|
|
| Ok Gracias |
|
| Volver arriba |
|
 |
|