Obsługa zdarzeń w kontrolkach tworzonych dynamicznie

0

Załóżmy, że na formatce aplikacji tworzę dynamicznie różną za każdym razem ilość obiektów tego samego typu (np. TShape). Obiekty dla porządku organizuję w tablicę. Następnie każdemu z obiektów przyporządkowuję tę samą procedurę obsługi zdarzenia np. OnMouseDown. Po naciśnięciu przycisku myszki na wybranym obiekcie procedura obsługi zdarzenia jest wywoływana, ale nie wiem, który z obiektów ją wywołał, gdyż nie wiem jak dotrzeć do wywołującego obiektu za pomocą przekazywanego przez funkcję argumentu Sender. Innym podejściem do problemu mogło by być dynamiczne tworzenie procedur obsługi zdarzenia OnMouseDown dla każdego a obiektów z osobna, ale nie mam na to pomysłu.
Czy ktoś eksperymentował z sytuacją tego typu?

0

TShape(sender)

0

Już wiem o co chodzi ... dzięki!

Jednak mam kłopot chociażby z dostępem do parametrów obiektu, np:
int X = TShape(Sender)->Left
nie budzi zastrzeżeń kompilatora, jednakże podstawienie daje wynik 0 co nie jest zgodne ze stanem faktycznym

Przy wspomagniu się zawartością internetu uzyskałem poprawną składnię dla określenia obiektu wywołującego zdarzenie. Dla przykładowego TShape będzie to:
TShape *obiekt = dynamic_cast<TShape *> (Sender);

0

misiekd wpuscil cie w pokrzywy i to gleboko..

TShape(sender) to konstruktor ew. konstruktor kopiujacy.. to tworzy NOWA KONTROLKE i dlatego wlasnie to co dostales mialo LEFT==0.. pewnie nawet nie bylo na formatce

to drugie ktore sam wykopales - to rzutowanie i wlasnie tedy nalezalo od razu pojsc. jesli jestes na 100% pewien ze ot bedzie obiekt klasy tshape, to zamiast dynamic casta wystarczy:

TShape* obiekt = (TShape*)sender

0

no fakt, przeca to c++ a tu się "na odwrót" rzutuje nie typ(obiekt) tylko (typ)obiekt - mea culpa

// nawet nie o to chodzi, bo mozna i tak rzutowac, chodzi o typ ktory podales TShape zamiast TShape*, inna rzecz, że TShape* trzeba zamknac w nawiasach, zeby uszczegolniec o jaki typ chodzi. (TShape*)(sender) jest rownie dobrze [mf]

0

Dzięki za informacje. W grę wchodzą różne obiekty, ale sprawdzam wcześniej ich typ poprzez
Sender->ClassName()
Jak widzę chyba niepotrzebnie ...

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