Goedeavond allemaal,
Laat ik beginnen met de vertellen dat dit een huiswerk opdracht is, maar ik heb een specifiek probleem en ik zit echt vast.
Ik ben bezig met het maken van vier op een rij. Het is uiteindelijk de bedoeling dat het een versie wordt met een AI tegenspeler, maar dat is voor dit probleem niet zo belangrijk.
Ik heb op het moment een twee dimensionaal array gecreeerd van TShape objecten. Dit stelt het speelbord voor. Deze objecten creeer ik runtime met de volgende code:
De Tag property gebruik ik om de indexen i en j van het object achter elkaar op te slaan en die wil ik later weer gebruiken voor het MouseDown event. Het event ziet er nu zo uit:
Het idee is dat ik van het object waarop geklikt is de Tag property uitlees. Dit splits in x en y en dan van de juiste TShape de kleur verander. Het probleem is dat dit event nooit wordt uitgevoerd. Van design time objecten weet ik hoe je een event maakt, maar bij runtime gecreeerde objecten krijg ik het niet voor elkaar. Zelfs niet als ik een enkele TShape runtime creeer ipv. een array.
Wie weet hoe ik alle array objecten met een event af kan handelen?
Laat ik beginnen met de vertellen dat dit een huiswerk opdracht is, maar ik heb een specifiek probleem en ik zit echt vast.
Ik ben bezig met het maken van vier op een rij. Het is uiteindelijk de bedoeling dat het een versie wordt met een AI tegenspeler, maar dat is voor dit probleem niet zo belangrijk.
Ik heb op het moment een twee dimensionaal array gecreeerd van TShape objecten. Dit stelt het speelbord voor. Deze objecten creeer ik runtime met de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| for( int i = 0; i <= 6; i++) //6
{
for( int j = 0; j <= 5; j++) //5
{
Speelbord[i][j] = new TShape(Form1);
Speelbord[i][j]->Parent = Form1;
Speelbord[i][j]->Shape = stCircle;
Speelbord[i][j]->Pen->Style = psClear;
Speelbord[i][j]->Height = height;
Speelbord[i][j]->Left = xPosForm;
Speelbord[i][j]->Top = yPosForm;
Speelbord[i][j]->Brush->Color = clGray;
Speelbord[i][j]->Tag = i * 10 + j;
yPosForm = yPosForm + yForm;
}
xPosForm = xPosForm + xForm;
yPosForm = 6;
} |
De Tag property gebruik ik om de indexen i en j van het object achter elkaar op te slaan en die wil ik later weer gebruiken voor het MouseDown event. Het event ziet er nu zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| void __fastcall TForm1::SpeelbordMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int shape;
int x;
int y;
ShowMessage("mousedown event"); //debug code
shape = ((TShape*)Sender)->Tag;
x = shape / 10;
y = shape % 10;
Speelbord[x][y]->Brush->Color = clRed;
} |
Het idee is dat ik van het object waarop geklikt is de Tag property uitlees. Dit splits in x en y en dan van de juiste TShape de kleur verander. Het probleem is dat dit event nooit wordt uitgevoerd. Van design time objecten weet ik hoe je een event maakt, maar bij runtime gecreeerde objecten krijg ik het niet voor elkaar. Zelfs niet als ik een enkele TShape runtime creeer ipv. een array.
Wie weet hoe ik alle array objecten met een event af kan handelen?