[BCB] Funkcja jako argument funkcji...

0

Witam!
Właśnie zastanawiam się od prawie 2 godzin jak przekazać funkcję jako argument innej. Mam pewną funkcję, za pomocą której chciałbym przypisywać zdarzenia OnClick guziczkom:

void __fastcall TMainF::SetOnClick(TWinControl *Owner, void *Event)
{

  for (int Idx = 0; Idx < Owner->ComponentCount -1; Idx++);
        dynamic_cast<TSpeedButton*>(Owner->Components[Idx])->OnClick = *Event;

}

Ok, to jest źle... wiem. I właśnie nie mogę dojść co wpisać zamiast tego "void *Event" w argumentach, oraz "*Event" przy przypisywaniu zdarzenia, aby zgadzał się typ ze zdarzeniem OnClick. Szukałem już w helpie, przeglądałem różne kodziki i Qpa... jestem zielony [stuk] albo ślepy (głupi?)...

0
void __fastcall TMainF::SetOnClick(TWinControl *Owner, void __fastcall (*event)(TObject*)){
  for (int Idx = 0; Idx < Owner->ComponentCount -1; Idx++)
    dynamic_cast<TSpeedButton*>(Owner->Components[Idx])->OnClick = event;
}

Może tak? Oczywiście funkcja podstawiana musi mieć taki sam nagłówek: __fastcall funkcja(TObject* parametr)- mniejsza o nazwy, ważne, aby typy były takie same.

// No patrz, nie miałem zielonego pojęcia :d

0

Dzięki, zacząłem trochę kapować w końcu na jakiej zasadzie to działa.
Tylko miałem problem, bo to:

void __fastcall (*event)(TObject*)

...nie jest tego samego typu to zdarzenie OnClick. Ale udało i się juz dojść do rozwiązania. Więc w przypadku OnClick powinno to wyglądać tak:

void __fastcall (__closure *event)(TObject*)

Dzięki wielkie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1