Событие OnClick для динамического изображения - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь построить игру памяти с 16 парами карт.

Я не знаю точно, как реализовать событие OnClick.Я новичок в использовании C ++ Builder, поэтому, пожалуйста, помогите.

Изображения находятся в массиве, я распределяю их динамически следующим образом:

for(int i=0;i<4;i++)
{
    for(int j = 0; j < 8 ; j++)
    {
        VectorOfImages[i*8+j]=new Card(9+i*112,9+j*112,pan, 0);
        VectorOfImages[i*8+j]->image->Picture>LoadFromFile("...OOP\\c\\images\\0.bmp");
        VectorOfImages[i*8+j]->image->Tag=i*8+j;
        VectorOfImages[i*8+j]->image->Enabled=false;
    }
}

1 Ответ

0 голосов
/ 30 ноября 2018

OnClick является свойством TImage, вы можете назначить его так же, как любое другое свойство, например:

for(int i = 0; i < 4; ++i)
{
    for(int j = 0; j < 8; ++j)
    {
        int idx = (i*8) + j;
        VectorOfImages[idx] = new Card(9+i*112, 9+j*112, pan, 0);
        VectorOfImages[idx]->image->Picture->LoadFromFile("...OOP\\c\\images\\0.bmp");
        VectorOfImages[idx]->image->Tag = idx;
        VectorOfImages[idx]->image->Enabled = false;
        VectorOfImages[idx]->OnClick = &ImageClicked; // <-- here
    }
}

Затем добавьте ImageClicked() в вашу форму:

private:
    void __fastcall ImageClicked(TObject *Sender);

...

void __fastcall TMyForm::ImageClicked(TObject *Sender)
{
    // Sender points at the TImage that was clicked...
    TImage *Image = static_cast<TImage*>(Sender);
    // use Image as needed...
}
...