Dynamiczne podpinanie funkcji obsługi zdarzenia

Zazwyczaj funkcje obsługi zdarzeń są podpinane do odpowiednich zdarzeń w czasie projektowania formularza przez okienko Inspektora Obiektów (Object Inspector). Jednak czasami zachodzi potrzeba wykonania tej czynności w kodzie źródłowym programu.

Aby podpiąć funkcję obsługi zdarzeń do danego zdarzenia w kodzie źródłowym programu (dynamicznie) należy sprawdzić, czy funkcja, którą podpinamy do zdarzenia ma dokładnie takie same parametry jak funkcja, która byłaby normalnie tworzona przez Inspektora Obiektów, np.:

umieśćmy na formularzu dwa przycisku TButton, w pliku nagłówkowym, np. w sekcji private deklarujemy funkcję, która będzie obsługiwała zdarzenie OnClick drugiego przycisku (gdy ją podepniemy):

Unit1.h

private:
   void __fastcall OnClick(TObject *Sender);

w pliku źródłowym piszemy kod tej funkcji:

Unit1.cpp

void __fastcall TForm1::OnClick(TObject *Sender)
{
   ShowMessage("Button2");
}

na koniec dla pierwszego przycisku tworzymy zdarzenie OnClick za pomocą Inspektora Obiektów:

Unit1.cpp

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   //tu następuje dynamiczne podpięcie funkcji
   Button2->OnClick = OnClick;
   ShowMessage("Button1, podpięto funkcję");
}

Od razu po uruchomieniu programu możecie zobaczyć na jakiej zasadzie to działa, spróbujcie kliknąć przycisk drugi - żadnej reakcji, a teraz kliknijcie pierwszy, który podpina funkcję do drugiego przycisku i kliknijcie drugi przycisk.