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

c++ builder canvas, timer

Object Storage Arubacloud
0 głosów
235 wizyt
pytanie zadane 25 kwietnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)

Chciałbym sobie zbudować robota co będzie tańczył, no i chce to zrobić używając Canvasa bo nigdy tego nie robiłem niż ręcznie tworzyć kształty, no narysowanie sobie ogarnę bo przeczytałem artykuł jakiś ale chcę żeby niektóre kwadraty (z jego rąk się przemieszczały raz o x pixeli w górę a potem po jakimś czasie wracały. Jakbym to robił wstawiając ręcznie Shapy to bym dał Timer który co jakiś czas by:

if (kwadrat->Top==200 && kwadrat->Left==200) //przykladowe koordynaty
{
 kwadrat->Top+=100;
}
if (kwadrat->Top==300 && kwadrat->Left==200)
{
 kwadrat->Top-=100;
}

ale nie wiem jak przypisać jakąś nazwę kształtu Canvas lub jak jakoś go namierzyć, żeby komputer wiedział o który mi chodzi, no i nie wiem w sumie czy będe mógł go jakoś wpisać w Timer  

1
komentarz 26 kwietnia 2020 przez j23 Mędrzec (194,920 p.)
Rozwiń.
komentarz 27 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
no to chodzi mi o to, że załóżmy że sobie narysuje za pomocą Canvas 2 kwadraty, to teraz jak mam ich używać, jak mam na nich operować tzn, no one nie mają chyba żadnej nazwy bo np jakbym sobie stworzył ręcznie Shape to bym sobie zmienił nazwę na np MojKwadrat i bym mogl sobie pisac MojKwadrat->Left=300; itp no i wlasnie nie wiem jak to dziala no i przez to tez nie wiem jak np wpisac go w Timer zeby np co sekunde wykonywala sie jakas instrukcja
1
komentarz 27 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

Jeśli to będą tylko kwadraty, to możesz użyć klasy TRect, której instancja będzie reprezentować dany kwadrat. Dla bardziej zaawansowanych figur możesz zdefiniować własne klasy i skorzystać z polimorfizmu.

komentarz 27 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)

czym jest instancja?

No to beda w sumie kwadraty i prostokaty, 

I w sumie jak się to robi bo myslalem, ze wsytarczy napisac tak:

Canvas->Rectangle(100, 100, 200, 300);

ale nic nie wyskakuje po f9

no i zalozmy ze juz narysuje ten prostokat to jak sie do niego odwolywac tzn jak on sie nazywa czy cos?

1
komentarz 27 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

czym jest instancja?

Obiektem, czymś, co istnieje w pamięci.

ale nic nie wyskakuje po f9

Nie rozumiem...

to jak sie do niego odwolywac tzn jak on sie nazywa czy cos?

Na przykład przez indeks:

std::vector<TRect> rectangles;

...

for (int i = 0; i < rectangles.size(); ++i) {
    Canvas->Rectangle(rectangles[i]);
}

 

komentarz 27 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)

okej ogarnalem ze nie mozna tak po prostu wpisac do kodu tego Canvasa tylko trzeba w czyms np w timerze i teraz pytanko rysuje se ten kwadracik i jak mam go przemieszczac np

Canvas->Rectangle(100, 100, 150, 150);

Rectangle->Left+=200;

Chce zeby po sekundzie sie np przesunal w prawo o 200 pikseli to jak to zapisac?

komentarz 27 kwietnia 2020 przez j23 Mędrzec (194,920 p.)
No a w timerze próbowałeś?
komentarz 27 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)

No tak tylko nie wiem jak sie odwolac do stworzonego Kwadratu no nie znam jego nazwy nie wiem jak to sie robi po prostu

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Canvas->Rectangle(100, 100, 500, 500);
Rectangle->Left+=100;
}

 

1
komentarz 27 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

Przecież pokazałem Ci, jak to możesz zrobić.

Skoro Rectangle jest rysowanym kwadratem, to dlaczego nie dajesz jego współrzędnych metodzie Rectangle, tylko na sztywno je tam ustawiasz?

komentarz 27 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
Moglbys napisac kod, byloby latwiej bo nie rozumiem co napisales teraz, wpisalem wspolrzedne Rectangle, przeciez
1
komentarz 28 kwietnia 2020 przez j23 Mędrzec (194,920 p.)
Canvas->Rectangle(Rectangle);
Rectangle->Left += 100;

przy założeniu, że Rectangle to TRect.

komentarz 29 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
ok a jak zrobic zeby Rectangle byl TRect? Ja naprawde pierwszy raz w zyciu takie cos robie plus jestem totalnie poczatkujacym, jak bys mogl to prosilbym o dokladniejsze tlumaczenie bo nie wiem totalnie niektorych rzeczy albo jakies zrodlo gdzie sie o tym dowiedziec

wpisalem struct TRect;; nie wiem czy to potrzebne ale po wpisaniu tego co wyslales to wyskakuje mi

[C++ Error] Unit1.cpp(31): E2285 Could not find a match for 'TCanvas::Rectangle(int (__stdcall *)(void *,int,int,int,int))'

[C++ Error] Unit1.cpp(32): E2288 Pointer to structure required on left side of -> or ->*
1
komentarz 29 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

ok a jak zrobic zeby Rectangle byl TRect?

Żartujesz? Zdefiniuj Rectangle jako zmienną typu TRect.

jestem totalnie poczatkujacym

Czy aby ten projekt nie jest ponad twoje możliwości na tę chwilę? Gubisz się przy naprawdę prostych rzeczach, być może jeszcze za wcześnie na pisanie tego typu programów.

komentarz 29 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
nie wiem, mozliwe, dlatego chce sie nauczyc bo nigdy nie korzystalem z Canvas, robota sobie wymyslilem jak sie ukonczy wszystkie lvle w sudoku ktore mam napisane i dziala tak jak sudoku, dostalem tu mnostwo pomocy na forum jak uproscic kod piszac sprytniej ale rozumiem to co jest napisane i jak dziala, kto pyta nie bladzi a ja nigdy po prostu nie widzialem zmiennej typu TRect
komentarz 29 kwietnia 2020 przez j23 Mędrzec (194,920 p.)
komentarz 29 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
TRect Rectangle=Rect(100,100,300,300);
Canvas->Rectangle(Rectangle);
Rectangle->Left+=100;

ok bez trzeciej linijki fajnie mi rysuje tak jak ma byc, ale po dodaniu 3 linijki mam

[C++ Error] Unit1.cpp(34): E2288 Pointer to structure required on left side of -> or ->*

1
komentarz 29 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

Dowiedz się, jaka jest w C++ różnica miedzy . a ->.

TRect Rectangle=Rect(100,100,300,300);

Wystarczy TRect Rectangle(100,100,300,300);

W twoim kodzie Rectangle jest zmienną lokalną, więc to zwiększenie Left nic nie da, bo za każdym razem zmienna jest tworzona na nowo.

komentarz 29 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
A okej to mam rozumiec, ze takie przesuwanie co jakis czas ksztaltu narysowanego metoda Canvas nie jest mozliwe?
komentarz 30 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

Jest możliwe, tylko Rectangle musi być zdefiniowana np. jako pole klasy TForm1(?).

komentarz 30 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
czyli jak
komentarz 30 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

Nie będę Cię uczył podstaw -> pierwszy z brzegu link

komentarz 30 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
rozumiem, że TForm to klasa już tak? Nie wiem jaki typ zmiennej dać probowalem:

 

class Rectangle;

TRect Rectangle;

Rect Rectangle;

nie wiem co tu ma być naprawde nie latwiej byloby gdybys napisal wszystko co trzeba robic a nie 3 dzien piszemy o tym samym? chcialem sie nauczyc tylko Canvas, moge sobie to z Shapow manualnie narysowac
komentarz 30 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

Przecież nie będę za Ciebie pisać programu. To, o czym piszemy, jest naprawdę banalne, tylko Tobie brak podstaw i dlatego masz z tym trudności. Zabrałeś się za projekt, który wymaga nieco więcej wiedzy niż ta, którą teraz posiadasz. Chcesz nauczyć się Canvas. A wiesz chociaż, czym ten Canvas jest?

Tak, TForm jest klasą. Poprawna definicja to TRect Rectangle;

komentarz 30 kwietnia 2020 przez lujasjeden Użytkownik (860 p.)
no dokladnie brakuje mi wiedzy to pytam proste, tak czytalem czym jest Canvas, chodzi mi tylko jak sobie narysowana figure przemieszczac, zmieniac Visibla itp bo nie moge znalezc o tym informacji, ale juz trudno zaczalem to robic sobie manualnie

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 130 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez 10parys10 Początkujący (360 p.)
+1 głos
1 odpowiedź 321 wizyt
pytanie zadane 25 października 2016 w JavaScript przez Miki Bywalec (2,480 p.)
0 głosów
1 odpowiedź 241 wizyt

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 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!

...