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

Class - Zmiana właściwości dla wszystkich stworzonych obiektów w danej klasie.
Q1
  • Rejestracja:ponad 15 lat
  • Ostatnio:prawie 11 lat
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.

Kopiuj
 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ę:

Kopiuj
 AnsiString UtworzNazwe()
  {
  AnsiString name = "Kwadrat" + IntToStr(number);
  return name;
  }

Tworzenie obiektu:

Kopiuj
void __fastcall TForm1::Button1Click(TObject *Sender)
  {
  Size=Edit1->Text;
  TKwadrat* Kwadrat= new TKwadrat(this);
  }
 
Sasik
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 2 lata
  • Postów:350
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.


Nadzieja...
FF
  • Rejestracja:około 13 lat
  • Ostatnio:około 13 lat
  • Postów:12
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...


"You are not stupid, you just need to work harder."

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.