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

C++ builder przesuwanie TImage

VPS Starter Arubacloud
0 głosów
883 wizyt
pytanie zadane 8 kwietnia 2016 w C i C++ przez emilime Nowicjusz (220 p.)

Witam, mam problem nad którym głowie się już kilka dni, szukałem po internecie i nie znalazłem żadnej przydatnej podpowiedzi. Chce aby automatycznie tworzyły się w okienku obrazki TImage co jakiś czas, oraz po stworzeniu, aby przesuwały się automatycznie w dół. Stworzyłem taką funkcje: 

void __fastcall mCreate()
{
    TImage * pic = new TImage(Form1);
    pic->Parent= Form1;
    int X = RN();
    int Y = 10;

    try {
		pic->Picture->LoadFromFile("img/meteor2.bmp");
                pic->Transparent=true;
                pic->Top=Y;
                pic->Left=X;
                pic->Visible= true;
                pic->AutoSize=true;

	}
	__finally
	{
		delete pic;
	}

 

-RN() to mój generator liczb losowych, działa prawidłowo.

i wywołuje ją w Timerze, ale obrazki się nie pokazują. Samo przesuwanie wydaje mi się, aby zrobić przez inny Timer(potrzebuje inny Interval do przesuwania i tworzenia) kodem np. pic->Top += 5, no ale przy tworzeniu te obrazy nie wyświetlają się. Próbowałem już z obrazami typu TBitmap, które udało się tworzyć i pokazywały się(uzywając Canvas->Draw()  ), ale za nic nie wiem jak je potem przesuwać. Nie znalazłem w internecie nawet żadnego kodu/funkcji itp które odpowiadały by za "pokazywanie" obrazka TImage na ekranie, tak jak to jest w przypadku Draw() dla TBitmap. Jak ten problem rozwiązać? Jest to kluczowe dla mojego programu, a ja już nie mam pomysłów 

1 odpowiedź

+2 głosów
odpowiedź 8 kwietnia 2016 przez jeremus Maniak (59,720 p.)
w sekcji __finally usuwasz obiekt pic , który utworzyłeś dlatego nic nie widać

obsłuż wyjątek przez catch(...)
komentarz 9 kwietnia 2016 przez emilime Nowicjusz (220 p.)
edycja 9 kwietnia 2016 przez emilime

Dzięki, działa, ale czy teraz zwalnia się pamięć po wyłączeniu programu? (bo chyba obrazy tworzone w ten sposób trzeba jakoś usuwać) Mam jeszcze problem z wywołaniem pic w timerze. Całą funkcję mCreate() wywołuje w pierwszym Timerze, a w drugim interesuje mnie tylko przesuwanie tego już stworzonego obrazka i kolejnego i kolejnego itd.

 

Edit: już po sprawie, udało się przez stworzenie TImage * pic = new TImage(Form1);

poza funkcją mCreate(), banalne, a ja zawsze sie boje takich banalnych rozwiązań, jak z tym catch()  ;)

Podobne pytania

0 głosów
1 odpowiedź 290 wizyt
pytanie zadane 16 września 2017 w Programowanie przez Qnk Nowicjusz (140 p.)
0 głosów
1 odpowiedź 597 wizyt
pytanie zadane 11 maja 2020 w Systemy operacyjne, programy przez _Kuba_ Początkujący (250 p.)
0 głosów
1 odpowiedź 352 wizyt

93,006 zapytań

141,973 odpowiedzi

321,254 komentarzy

62,345 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...