Espero que esto le sirve a alguien. Bueno algunas veces en vez de pegar los componentes en el formulario y que builder se haga cargo de la creación y la destruir los componentes nos interesa crea los componente en tiempo de ejecución y ser nosotros los que nos encargemos de ellos.
Pero ahora bien qué pasa con los eventos que acompañan a estos componentes que nos interesa utilizar. Deberemos indicar en algún sitio los eventos que queremos utilizar y asociarlos de alguna forma para utilizarlos.
Para ello hay que declarar en *.h el evento que vamos a utilizar que lo podemos llamar como nos de la gana. Eso sí asociandolo con la forma en cuestión.
void __fastcall TForm1::pBeforeDelete(TDataSet *DataSet);
Yo en mi caso la he llamado pBeforeDelete y hay que declarlo en la parte Privada o public del fichero *.h NUNCA en __published
(ya que esto es sólo para lo que controla el C++ Builder). Ya que podeis comprobar que cuando pegamos un componente TTable en un formulario y activamos el eventos BeforeDelete por ejemplo en esta zona aparece esta parte de código.
void __fastcall Table1AfterCancel(TDataSet *DataSet);
Luego hay que colocar en el fichero *.cpp esta asociación: p (es un componente de tipo tabla creado de la siguiente forma
TTable *p = new TTable(Application)
p->BeforeDelete = pBeforeDelete;
De esta forma asociamos el evento BeforeDelete con la función que nosotros vamos a crear.
Posteriormente crearemos la función en cuestión: (Por ejemplo que cuándo alguien intente borrar un registro de la tabla no lo permita)
void __fastcall TForm1::pBeforeDelete(TDataSet *DataSet) {
Abort();
}
Aquí teneís un ejemplo:
/---------------------------------------------------------------------------
#ifndef CreacionEventosH
#define CreacionEventosH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Db.hpp>
#include <DBGrids.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TDataSource *DataSource1;
TDBGrid *DBGrid1;
private: // User declarations
void __fastcall TForm1::pBeforeDelete(TDataSet *DataSet);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CreacionEventos.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TTable *p = new TTable(Application);
DataSource1->DataSet = p;
p->BeforeInsert = pBeforeDelete;
p->BeforeDelete = pBeforeDelete;
p->DatabaseName = "Verracos";
p->TableName = "Bisabuelo";
p->Active = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pBeforeDelete(TDataSet *DataSet) {
Abort();
}
//---------------------------------------------------------------------------