CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Kolor PaintBoxa

Kolor PaintBoxa

dział ogólny

Kolor PaintBoxa

Nowy postprzez lukagrom » niedziela, 4 grudnia 2016, 17:04

Pytanie może trywialne, ale rysuję na PaintBoxie figury za pośrednictwem (Pixels, LineTo, Arc etc) i chcę, żeby tło PaintBoxa nie było w domyśle szare jak cała forma, lecz miało wybrany kolor. Jeżeli wybieram w inspektorze obiektów właściwość "Color" i nadaję np żólty to po uruchomieniu PaintBox nadal jest koloru formy tj szary. Tak samo jak przypisuję to ręcznie:
Kod: Zaznacz cały
PaintBox1->Color=clYellow
to kompiluje się poprawnie, lecz PaintBox nadal szary, również próbowałem
Kod: Zaznacz cały
PaintBox1->Canvas->Brush->Color=clYellow;
również bez efektu. Co należy zrobić aby PaintBox przybrał iny kolo niż kolor formy?
Avatar użytkownika
lukagrom
Bladawiec
Bladawiec
 
Posty: 37
Dołączył(a): wtorek, 1 stycznia 2013, 14:54
Podziękował : 6
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 10.1 Starter
Gadu Gadu: 0
    Windows VistaChrome

Re: Kolor PaintBoxa

Nowy postprzez Cyfrowy Baron » niedziela, 4 grudnia 2016, 18:26

TPaintBox nie posiada własnej powierzchni na której można by rysować. To tylko zestaw narzędzi do rysowania. Czyli rysując na PainBox rysujesz tak naprawdę na powierzchni na której PainBox się znajduje. PaintBox nie posiada również pamięci tego, co zostało na nim narysowane, więc jeżeli coś narysujesz na PaintBox a potem np. zminimalizujesz i przywrócisz okno programu to zawartość PaintBox zniknie. Dlatego trzeba odrysowywać zawartość PaintBox każdorazowo gdy zachodzą zmiany w formularzu, a to oznacza, że kod rysujący po PaintBox musi znajdować się w jego zdarzeniu OnPaint. Ponieważ PaintBox sam z siebie nic nie robi, by wypełnić go kolorem nie wystarczy ustawić koloru powierzchni, trzeba tą powierzchnię tym kolorem wypełnić np. za pomocą funkcji FillRect, np:

KOD cpp:     UKRYJ  
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
PaintBox1->Canvas->Brush->Color=clYellow;
PaintBox1->Canvas->FillRect(PaintBox1->ClientRect);
}
Kolejna sprawa, gdy chcesz teraz na takiej powierzchni narysować np. prostokąt w innym kolorze, to musisz najpierw ustawić Brush dla powierzchni a potem Brush dla prostokąta, np:

KOD cpp:     UKRYJ  
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
PaintBox1->Canvas->Brush->Color = clYellow;
PaintBox1->Canvas->FillRect(PaintBox1->ClientRect);

PaintBox1->Canvas->Brush->Color = clWhite;
PaintBox1->Canvas->Pen->Color = clGreen;

PaintBox1->Canvas->Pen->Width = 3;
PaintBox1->Canvas->Rectangle(10, 10, 100, 50);
}


Cały kod odrysowujący musi być powtarzany w zdarzeniu OnPaint. Nie można najpierw narysować coś, a potem dorysować coś innego. Możesz oczywiście tworzyć funkcje i w zdarzeniu OnPaint umieszczać te funkcje.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
lukagrom
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox

Re: Kolor PaintBoxa

Nowy postprzez Cyfrowy Baron » niedziela, 4 grudnia 2016, 18:30

W załączniku taki przykładowy program rysujący po PainBox. Tutaj rysuje punkty czerwone i łączy je liniami. Chwytając czerwone punkty można je przesuwać. Tworzyłem go kiedyś na potrzeby tematu z tego forum. Możesz sobie przejrzeć kod.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 25 gości

cron