1) u svojoj nasledjenoj shape klasi uradis jednostavno override nasledjenih eventova (onclick, onmousedown, itd) i u njima pozivas funkcije ili druge eventove koje ti hoces.
Ukoliko nisam najbolje razumeo sta hoces da postignes, pogledaj i DefWndProc metod koji imaju sve klase potekle od TWinControl.
2) Prvo treba da znas sta event mora da prosledi kao parametar. Ukoliko je to nesto standardno, koristis gotove prototipove eventova, kao sto je npr. TNotifyEvent (koji prosledjuje samo Sender kao TObject pointer). Ukoliko nije standardno, onda moras da definises prvo svoj prototip eventa. _PRE_ definicije klase definises event (u ovom primeru se radi o nasledjenoj TTreeView klasi koja je vezana za bazu - cisto radi razjasnjenja) :
[code:1]
typedef void __fastcall (__closure *TTreeViewAddEvent)(
TObject* Sender,
TDataSet* DataSet,
AnsiString name);
[/code:1]
Zatim koristis taj prototip da bi deklarisao event kao (FOnAdded) atribut klase (objekt fakticki cuva samo pointer ka funkciji) i property koji koristi tu istu funkciju sacuvanu u atributu i za read i za write:
[code:1]
class TDBXTreeView : public TCustomTreeView
private:
TTreeViewAddEvent FOnAdded;
...
public: (ili u "published:", zavisi da li hoces prikaz u Object Inspectoru)
__property TTreeViewAddEvent OnAdded ={read=FOnAdded, write=FOnAdded};
...
[/code:1]
Dalje u programu kada treba da se okine taj event, pozoves ga prosto kao funkciju, uz ogradu da prvo treba da proveris da li atribut ima ikakav pointer ka funkciji dodeljen (bilo kroz object inspector u design timeu ili kroz kod - runtime) ili je jos uvek null:
if(OnAdded) OnAdded(this, destinationtable, name);