Class - Zmiana właściwości dla wszystkich stworzonych obiektów w danej klasie.

0

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);
  }
 
0

Sposobów masz milion :] Jeśli dodajesz te kwadraty w jakiejś metodzie obiektu TForm1, to dodaj sobie zmienną w tej klasie, w której będziesz trzymał te kwadraty. To, jakiego typu to będzie zmienna, zależy od tego, czy będziesz je potrzebował usuwać, czy nie (ale vector tak czy inaczej powinien być co najmniej wystarczający). Tak samo nie wiem, w czym to wszystko piszesz i kto jest odpowiedzialny za zwalnianie kwadratów (tj. gdzie robisz delete Kwadrat), ale jeśli nie robisz tego ty, to w tej dodatkowej zmiennej trzymaj sobie wskaźniki lub referencje do kwadratów.

0

W kontrolkach jest miejsce na zmienna liczbową, takie ID, nie pamiętam nazwy już niestety.
Możesz też wybierać kontrolki po nazwach.
Sposobów jest bardzo dużo...

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