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

Nazwy obiektów jako zmienne - Builder

Object Storage Arubacloud
0 głosów
284 wizyt
pytanie zadane 30 grudnia 2017 w C i C++ przez qsoll Początkujący (440 p.)

Witam,

Chciałbym dowiedzieć się ,czy istnieje sposób ,który pozwoli zmieniać w kilku obiektach ten sam parametr. Nie wiem czy zrozumiale się wysłowiłem ,dlatego posłużę się prostym przykładem. W jednej formie mam sporo Image'ów i do każdego z nich chciałbym załadować to samo zdjęcie. Po zakończeniu kursu pana Zelenta zrobiłbym to tak:

img1->Picture->LoadFromFile("img/zdj.bmp");
img2->Picture->LoadFromFile("img/zdj.bmp");
... itd

Natomiast przeczucie podpowiada mi ,że jest na to szybszy sposób ,który zrobi to samo w jednej lub kilku liniach kodu zamkniętych w pętli. Problem pojawia się ,gdy builder zabrania nazywanie różnych obiektów tak samo ,oraz zabrania nazywać ich samą liczbą całkowitą ,co może jest dobre ,ale uniemożliwia zastosowanie tego pomysłu na mój "chłopski rozum". Moje pytanie do Was brzmi ,czy istnieje taki sposób, żeby nie musieć pisać tego samego do każdego Image'a ,a zrobić to szybciej. Jeśli da się tak zrobić ,prosiłbym również o wskazówki dotyczące implementacji tego rozwiązania.

Pozdrawiam oczekując odpowiedzi smiley 

1 odpowiedź

+1 głos
odpowiedź 30 grudnia 2017 przez JAKUBW Nałogowiec (33,470 p.)
wybrane 30 grudnia 2017 przez qsoll
 
Najlepsza

C++ builder to bardzo stare, niewspierane narzędzie. Polecam użyć współczesnej alternatywy.

 

Ale jeżeli nie chcesz to taki kod właduje do wszystkich Image pewien obraz


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

obj->Picture->LoadFromFile("img/zdj.bmp"); 
    }
 }

Aczkolwiek ten kod jest bardzo nie wydajny - wczytuje obraz z dysku tyle razy ile jest obrazów. Przerób go tak aby obraz wczytać raz i tylko kopiować do poszczególnych TImage.

komentarz 30 grudnia 2017 przez qsoll Początkujący (440 p.)

Bardzo Ci dziękuję za tak szybką i konkretną odpowiedź! wink Póki co w programach okienkowych głównie bazuję na wiedzy zdobytej w tutorialach pana Mirosława ,więc część rzeczy zdaje się być dla mnie nowa ,dlatego zabieram się do pracy żeby zrozumieć ten kod i tak jak Pan mówił ,jeśli będzie to w mojej mocy postaram się go ulepszyć. Jeszcze raz stokrotne dzięki.

komentarz 30 grudnia 2017 przez j23 Mędrzec (194,920 p.)

Jak już robisz dynamic_casta, to wykorzystaj go w pełni:

for (int i = ComponentCount - 1; i >= 0; i--)
{
	TImage* obj = dynamic_cast<TImage*>( Components[i] )

	if (obj != NULL && Temp->Tag == 0)
	{
		obj->Picture->LoadFromFile("img/zdj.bmp"); 
	}
}

 

komentarz 30 grudnia 2017 przez JAKUBW Nałogowiec (33,470 p.)

Jak już idziemy w tą stronę to tak chyba będzie ładniej:
 

for (auto obj : Components)

if (auto img = dynamic_cast<TImage*>(obj)){

img->Picture->LoadFromFile("xd");

}



Ale zapewne c++ builder nie współpracuje z najnowszymi standardami i trzeba się męczyć z starszymi.

komentarz 30 grudnia 2017 przez j23 Mędrzec (194,920 p.)

No raczej...  Zresztą żeby to działało z tym typem pętli, Components musiałoby być tablicą lub obiektem z metodami .begin()/.end() zwracającymi iteratory. A coś mi się wydaje, że jest to albo wskaźnik, albo właściwość (__property).

Podobne pytania

0 głosów
1 odpowiedź 258 wizyt
pytanie zadane 16 września 2017 w Programowanie przez Qnk Nowicjusz (140 p.)
0 głosów
1 odpowiedź 244 wizyt
pytanie zadane 13 stycznia 2018 w C i C++ przez MikeMG Początkujący (330 p.)
0 głosów
4 odpowiedzi 2,918 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...