• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak stworzyć komponenty w tablicy | C++ Builder | Borland

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,182 wizyt
pytanie zadane 17 listopada 2015 w C i C++ przez Przemysław Obywatel (1,510 p.)

Witam. Mam pytanie. Kiedy w programie c++ builder dodaję różne elementy (kompotenty, czy jak to nazwać) np. zdjęcia, okienka, figury itp. na ekran. Probelm w tym, że każdy z nich dodaje się jako osobny wskaźnik:

W tej sytuacji, jeśli np. chciałbym zmienić wszystkim kwadratom width na 100, musiałbym zrobić tak:

Form1 -> Shape1 -> width = 100;
Form1 -> Shape2 -> width = 100;
Form1 -> Shape3 -> width = 100;



Jak wrzucić wszystkie 3 kwadraty do jednej 3-elementowej tablicy? Chodzi o to, żebym to samo co wyżej, mógł zrobić tak:
 

for(int i=0; i<3; i++)
{
Form1 -> Shape[i] -> width = 100;
}



Wiem, że na tym przykładzie to mi dużej różnicy nie robi, ale mam zamiar stworzyć program z 500 takimi figurami i wtedy takie działanie (zwłaszcza, że nie chodzi o zwykłe "zmienienie szerokości") było by okropnie uciążliwe, wręcz nierealne.

Z GÓRY DZIĘKI ZA POMOC! :D

3 odpowiedzi

0 głosów
odpowiedź 17 listopada 2015 przez Grzyboo Nałogowiec (28,860 p.)
Eee... Po prostu stwórz tablicę wskaźników.
komentarz 17 listopada 2015 przez Przemysław Obywatel (1,510 p.)
próbowałem w ten sposób:TShape *Shape[5]; ale wywala błąd ;(
komentarz 18 listopada 2015 przez Grzyboo Nałogowiec (28,860 p.)
Cóż za błąd?
komentarz 18 listopada 2015 przez Przemysław Obywatel (1,510 p.)
Error in module Unit1: Incorrect field declaration in class TFrom1.
komentarz 18 listopada 2015 przez Grzyboo Nałogowiec (28,860 p.)
Nie kojarzę takiego błędu, a z builderem nie miałem nigdy do czynienia, więc nie jestem w stanie pomóc.
0 głosów
odpowiedź 18 listopada 2015 przez Przemysław Obywatel (1,510 p.)

Dzięki wszystkim za pomoc. Już znalazłem odpowiedź, poniekąd poprzez przeglądanie innych tematów na tym forum :)

Po prostu skoro mam na sztywno:
TButton *Button1;
TButton *Button2;
TButton *Button3;


To stworzyłem tablicę wskaźników, do których przypisałem adres tamtych wskaźników ;)

class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TShape *Shape1;
        TShape *Shape2;
        TShape *Shape3;
private:	// User declarations
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
        TShape *shp[5];
};

I w pliku .cpp (nie w nagłówku):

Form1 -> shp[0] = Form1 -> Shape1;
Form1 -> shp[1] = Form1 -> Shape2;
Form1 -> shp[2] = Form1 -> Shape3;

...



I teraz wystarczy takie coś aby zmienić parametr obiektu: 

Form1 -> shp[0] -> Left = 800;


:) Dziękuje wszystkim za pomoc. 

PS Sorry, ale nie wiem czemu się utworzyły 2 tematy.

0 głosów
odpowiedź 20 maja 2016 przez JAKUBW Nałogowiec (33,470 p.)

Możesz też zrobić automatycznie na wszystkie takie obiekty za pomocą kodu z rzutowaniem:

        int i;
	TComponent *Temp;

	for (i = ComponentCount - 1; i >= 0; i--)
	{
	    Temp = Components[i];
	    if ((dynamic_cast<TShape*>(Temp) != NULL)&& (Temp->Tag==0))//tylko na shape z tagiem 0 ale możesz to zmienić
	    {
		TShape* obj = ((TShape*) Temp);
		obj->Width = 100;
	    }
	 }

Nie sprawdzałem ale powinno działać.

Podobne pytania

0 głosów
2 odpowiedzi 262 wizyt
+1 głos
2 odpowiedzi 1,062 wizyt
0 głosów
2 odpowiedzi 243 wizyt
pytanie zadane 23 stycznia 2018 w C i C++ przez dawid35789 Nowicjusz (120 p.)

93,108 zapytań

142,085 odpowiedzi

321,607 komentarzy

62,449 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...