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

Jak zdefiniować komponent za pomocą zmiennej???

0 głosów
540 wizyt
pytanie zadane 30 lipca 2017 w C i C++ przez BIREXD Obywatel (1,180 p.)
Witam. Mam kilka komponentów Text w c++ builderze. Nazwyają się podobnie ( Text1, Text2, Text3...Text40, Text41 ). Chciałbym zmienić np. Wysokość tego numeru tekstu który jest w zmiennej.

Przykładowo: mam int x = 5 więc chce zmienić wysokość Text5.

Czy można to zapisać za pomocą jednej lini kodu np.

Text[x]->height = 25;

Niestety ten sposób nie działa.

Inaczej tego wytłumaczyć nie umiem mam nadzieję że mi pomożecie

1 odpowiedź

0 głosów
odpowiedź 30 lipca 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)

Przede wszystkim zostaw ten cały C++ Builder bo to nieziemski syf.
A co do problemu:
Jeśli wszystkie elementy są tego samego typu, lub mają wspólną klasę bazową to:
Załóżmy, że są tego samego typu T:
 

#include <vector>

T Text1, Text2, Text3; // itd itd

int main()
{
    std::vector<T*> components = { &Text1, &Text2, &Text3, ... };
    int x = 30;
    components[x]->height = ...;
}

 

komentarz 30 lipca 2017 przez BIREXD Obywatel (1,180 p.)
Dlaczego syf???
komentarz 30 lipca 2017 przez Knayder Nałogowiec (37,640 p.)
Bo ma 17 lat.
EDIT: No ok. 15.
komentarz 30 lipca 2017 przez BIREXD Obywatel (1,180 p.)
Ale kto ci powiedział że korzystam z 6 borlanda???
komentarz 30 lipca 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
To już nie chodzi o sam wiek - cała ta paczka, wraz z kompilatorem to staroć, który nie dość, że ma mało wspólnego z prawdziwym C++ to używa słabych rozwiązań. Do tego wygląd C++Buildera (tego od Borlanda) sprawia, że jest chyba najbrzydszym IDE jakie widziałem. Gdybym miał wybierać z dwóch IDE - Dev-Cpp i Borland C++ Builder to bym wybrał Dev-Cpp a może wxDev-Cpp - takie rozszerzenie, dzięki któremu można korzystać z wxWidgets.

Polecam Visual Studio ewentualnie QtCreator lub w ostateczności Code Blocks.
komentarz 30 lipca 2017 przez Knayder Nałogowiec (37,640 p.)
Poziom twojego pytania.
komentarz 30 lipca 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
Dobra, zamiast się tutaj kłócić to BIREXD napisz czy udało Ci się to rozwiązać. I chciałbym też zobaczyć jak wygląda deklaracja/definicja tych Text1, Text2 itp w kodzie.
komentarz 30 lipca 2017 przez j23 Mędrzec (195,240 p.)

W przypadku kontrolek VCL tak powinno być:

T* tab[] = { Text1, Text2, Text3, Text4, /* itd. */ };
	
int x = 5;

...
tab[x]->Height = ...;

 

komentarz 30 lipca 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
Czyli to samo co ja napisałem. Okej, Text1 to pointer ale to praktycznie nie ma znaczenia, bo autor sam sobie to dopasuje, to był tylko sam koncept.
komentarz 30 lipca 2017 przez BIREXD Obywatel (1,180 p.)

Czyli w builderze za pomocą tablic to zrobic?

Jeszcze mała dygresja korzystam z embarcadero xe8 10.1 Berlin

Ps: w builderze ten sposoób nie działa crying

komentarz 30 lipca 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)
Musi działać bo to nic wspólnego nie ma z IDE. Pokaż mi jak wygląda deklaracja tych Text1 itp.
1
komentarz 31 lipca 2017 przez j23 Mędrzec (195,240 p.)

@BIREXD, jak coś nie działa, to trzeba podać treść błędu lub nieco bardziej opisać problem. Lakoniczne "nie działa" nic nie wnosi.

 

Jeśli pola Textn są typu np. TEdit*, wtedy to T z przykładu powinno być zamienione na TEdit.

Podobne pytania

0 głosów
1 odpowiedź 575 wizyt
pytanie zadane 3 lipca 2018 w C i C++ przez urbix01 Gaduła (3,290 p.)
0 głosów
1 odpowiedź 625 wizyt
pytanie zadane 14 czerwca 2017 w C i C++ przez BIREXD Obywatel (1,180 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 26 grudnia 2015 w C i C++ przez Savuelo Początkujący (310 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...