Cześć. Robię prosty program polegający na wyliczaniu środka ciężkości dla stworzonych i umieszczonych na formie kwadratów. Natrafiłem jednak na pewien problem, ponieważ nie wiem w jaki sposób odwołać się przykładowo w Buttonie do wszystkich obiektów z danej klasy, aby zmienić im chociażby rozmiar. W konstruktorze obiektu nadaje każdemu nazwę: Kwadrat + index (Kwadrat0, Kwadrat1 ...). Poniżej umieszczam kawałek kodu, i liczę na Waszą pomoc.
class TKwadrat : public TShape
{
private:
TShape *TKwadrat;
public:
int x;
int y;
int k;
__fastcall TKwadrat::TKwadrat(TComponent* owner):TShape(Owner)
{
Shape=stRectangle;
Top=StrToInt(Possition);
Left=StrToInt(Possition);
Width=StrToInt(StrToInt(Size));
Height=StrToInt(StrToInt(Size));
Brush->Color=LosujKolor();
Name=UtworzNazwe();
Parent=Form1->Panel2;
Possition=Possition+10;
OnMouseDown=On1MouseDown;
OnMouseMove=On1MouseMove;
OnMouseUp=On1MouseUp;
dmAutomatic;
Cursor=crHandPoint;
}
__fastcall TKwadrat::~TKwadrat()
{
move=false;
}
void __fastcall TKwadrat::On1MouseDown(TObject *Sender, TMouseButton, TShiftState Shift, int X, int Y)
{
Pen->Width=2;
Pen->Color=clSkyBlue;
TMouse* Mouse;
TPoint Possition;
Possition = Form1->Panel2->ScreenToClient( Mouse ->CursorPos);
BringToFront();
move=true;
}
void __fastcall TKwadrat::On1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
if(move)
{
TMouse* Mouse;
TPoint Possition;
Possition = Form1->Panel2->ScreenToClient( Mouse ->CursorPos);
if(Possition.y < Panel2_H - (StrToInt(Size)) && Possition.y >0)
{
Top=Possition.y ;
}
if(Possition.x < Panel_W - (StrToInt(Size)) && Possition.x > 0)
{
Left=Possition.x ;
}
if(Possition.x >= Panel_W && Possition.y >= Panel2_H)
{
TKwadrat::~TKwadrat();
}
}
}
void __fastcall TKwadrat::On1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
Pen->Width=1;
Pen->Color=clBlack;
move=false;
}
};
Funkcja nadająca nazwę:
AnsiString UtworzNazwe()
{
AnsiString name = "Kwadrat" + IntToStr(number);
return name;
}
Tworzenie obiektu:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Size=Edit1->Text;
TKwadrat* Kwadrat= new TKwadrat(this);
}