Przypisywanie funkcji do dynamicznie tworzących się elementów

0

Dałoby się zrobić tak, aby funkcja mousedown( ) dla każdego stworzonego elementu była wykonywana właśnie dla tego elementu ?
Czyli może prościej: klikam na panel arr_of_panels[0] wykonuje się funkcja mousedown( ) tylko dla panelu arr_of_panels[0] i tak dla każdego elementu.

matrix.cpp

Matrix::Matrix(int rows, int cols) 
{
[...]
    for(int i=0 ; i<=8 ; i++) {
    this->arr_of_panels[i] = new TPanel(this);
    this->arr_of_panels[i]->Parent = this->box;
    this->arr_of_panels[i]->Width = 100;
    this->arr_of_panels[i]->Height = 25;
    this->arr_of_panels[i]->Top = 15 + 25*i;
    this->arr_of_panels[i]->Left = 10;
    this->arr_of_panels[i]->Caption = "";
    this->arr_of_panels[i]->Alignment = taLeftJustify;
    this->arr_of_panels[i]->OnMouseDown = mousedown;
    }
[...]
};
void __fastcall Matrix::mousedown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    this->arr_of_panels[??]->BevelOuter = bvLowered; \\tutaj pojawia się problem 
}

matrix.h

class Matrix {
private:
    TGroupBox *box;
    TStringGrid *grid;
    TPanel *inc_row, *dec_row, *inc_col, *dec_col;
    TPanel *arr_of_panels[9];
public:
    Matrix(int rows, int cols);
    void __fastcall mousedown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y);
};
1

nie znam tej biblioteki ale wychodzi na to, że TPanel jest TObjectem, więc może coś takiego

Sender->BevelOuter = bvLowered;

lub cast na panel dodatkowo, jeżeli nie jest to składowa klasy bazowej.

1

Użyj parametru Sender, który wskazuje na komponent którego dotyczy zdarzenie.

((TPanel*)Sender)->BevelOuter = bvLowered;

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