background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 1 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
 
 
 
 
 
 
 
 
 

PROGRAMOWANIE OBIEKTOWE 

 

 

 

ĆWICZENIE 3 

 
 
 
 

C++ BUILDER 6.0 PE 

 
 

 

Projektowanie prostej grafiki 

 

Obiekt TCanvas 

 

Obiekt TscrollBar 

 

Obiket TLabel 

 

Metoda MouseDown  

 

Metoda MouseUp 

 

Metoda MouseMove 

 

Zdarzenie OnMouseDown 

 

Zdarzenie OnMouseUp 

 

Zdarzenie OnMouseMove 

 

Zdarzenie TScrollBar->OnChange 

 

Plik nagłówkowy 

 
 
 
 
 
 
 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3. 

______________________________________________________________________ 

I.

 

Wstęp  

 

Naszą przygodę z grafiką w C++ Builderze rozpoczniemy od obiektu Canavas (ang. 

płótno).   
 
Nasz projekt plikacji zapiszemy w plikach rozpoczynających się od nazwy Grafika3.  

 
Utwórz projekt aplikacji za pomocą polecenia File









 New 









 Application 

 

 

 

 

 

 

Zapisz projekt aplikacji za pomocą polecenia File









 Save All ... 

 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 3 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

Zapisz projekt do plików: 
 

 

formularza do Grafika3Unit1.cpp

 

 

 

 

głównego pliku projektu Grafika3.bpr 

 

 

 

Zmień tytuł formularza Form1

 

 

 

Ustaw opcje projektu za pomocą polecenia Project









 Options ... 

 
 

 

 
a w oknie zmień następujące opcje:  

 
Polecenie: Project 









 Options 









 Application 









 Load Icon 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3. 

______________________________________________________________________ 

 

 

 
W polu „Nazwa pliku” ustaw Grafika3.ico

 

 

Po zatwierdzeniu w panelu „Icon” pojawi się właściwa ikona. 

 

 
Przejdź do zakładki „Linker” 
Wyłącz opcję „Use dynamic RTL”. 
 

 

 

Przejdź do zakładki „Packeges” 
Wyłącz opcję „Build with runtime packages”. 

 

 

Zatwierdź opcje projektu Grafika3 za pomocą przycisku „OK.” i przejdź do 

następnego rozdziału. 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 5 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 

II.

 

Obiekt Canvas 

 
Za pomocą klawisza F12 przejdź do okna edytora kodu C++: 

 

Oto plik źródłowy Grafika3Unit1.cpp  w C++ : 

 

 

 

Otwórz plik nagłówkowy Grafika3Unit1.h 
 

 

 
Kliknij na zakładce zawierającej napis „Grafika3Unit1.cpp” prawym przyciskiem 
myszy i wybierz pozycję „Open Source/Header File”. 

 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3. 

______________________________________________________________________ 

 
 

W oknie edytora pojawi się zawartość pliku nagłowkowego: 
 

 

 
W sekcji „public:” wstaw deklarację znacznika rysowania: 

 
bool Rysuj; 
 

Projektowanie zdarzenia OnMouseDown 

 
Zdarzenie OnMouseDown określa naciśnięcie myszy.  
 
Teraz zaprojektujemy odpowiedź formularza na naciśnięcie myszy.  
 
Za pomocą klawisza F11 przechodzimy do okna Object Inspector.  Wybieramy 
zakładkę Events i wyszukujemy zdarzenie „OnMouseDown”.  

 

 
Klikamy dwa razy na tym napisie OnMouseDown
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 7 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
Pojawia się okno kodu C++ i pusta metoda TForm1::FormMouseDown
 

 

 
W metodzie tej wpisujemy pomiędzy nawiasami klamrowymi { i } nastepujący kod: 
 
// okreslamy obszar rysowania i pozycję początkową 
Canvas->FillRect(ClientRect); 
Canvas->MoveTo(X,Y); 
//ustawiamy znacznik rysowania, aby mysz zostawiła slad 
Rysuj = true; 
 

Projektowanie zdarzenia OnMouseUp 

 
Zdarzenie OnMouseUp określa puszczenie myszy.  
 
Teraz zaprojektujemy odpowiedź formularza na puszczenie klawisza myszy.  
 
W oknie Object Inspector   wybieramy zakładkę Events i wyszukujemy zdarzenie 
OnMouseUp”. 
 

 

Klikamy dwa razy na tym napisie OnMouseUp
 
 
 
 
 
 
 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3. 

______________________________________________________________________ 

 
Pojawia się okno kodu C++ i pusta metoda TForm1::FormMouseUp
 

 

 
W metodzie tej wpisujemy pomiędzy nawiasami klamrowymi { i } nastepujący kod: 
 
// puszczono przycisk myszy - koniec rysowania 
Rysuj = false; 
 

Projektowanie zdarzenia OnMouseMove 

 
Zdarzenie OnMouseMove określa poruszanie się myszy.  
 
Teraz zaprojektujemy odpowiedź formularza na poruszanie się myszy.  
 
W oknie Object Inspector   wybieramy zakładkę Events i wyszukujemy zdarzenie 
OnMouseMove”. 
 

 

 
Klikamy dwa razy na tym napisie OnMouseMove
 
Pojawia się okno kodu C++ i pusta metoda TForm1::FormMouseMove
 

 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 9 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
W metodzie tej wpisujemy pomiędzy nawiasami klamrowymi { i } nastepujący kod: 
 
if (Rysuj) // przesunięto mysz 
    Canvas->LineTo(X, Y); 
 
Sprawdzamy działanie naszego projektu: 
 
Run 









 Run (F9) 

 

 

 
Projekt działa!!! Dodajmy teraz parę “bajerów”. 
 

Obiekt ScrollBar 

 
Dodajmy moŜliwość rysowania w dowolnym kolorze. Do naszego formularza 
dodajemy trzy komponenty ScrollBar i trzy etytkiety Label. Etykietom nadajemy 
kolejno właściwości: „Czerwony”, „Zielony”, „Niebieski”. I ustawiamy je obok 
kolejnych obiektów ScrollBar.  
 

 

 
 
 
 
 
 
 
 

background image

10 

C++ Builder. Programowanie obiektowe. Ćwiczenie 3. 

______________________________________________________________________ 

 
 
Właściwości Max wszystkich obiektów ScrollBar ustawiamy na 255 (0-255 daje 266 
odcieni kaŜdego koloru). 

 

 
W kodzie metody TForm1::FormMouseDown wykasuj linię 
 
Canvas->FillRect(ClientRect); 
 
W pliku nagłówkowym Grafika3Unit1.h w sekcji public dopisz nagłówek funkcji 
UstKolor
 
__fastcall UstKolor(void); 
 

 

 
Przejdź do kodu C++ Grafika3Unit1.cpp i dopisz metodę 
 __fastcall  Form1::UstKolor(void)
 
 
__fastcall TForm1::UstKolor(void) 

int NowyKolor;//w tej zmiennej wyliczymy nowy kolor 
NowyKolor=ScrollBar1->Position; // Zaczynamy od koloru czerwonego 
NowyKolor+=ScrollBar2->Position<<8;// Zielony przesuwamy o 8 bitów w lewo 
NowyKolor+=ScrollBar3->Position<<16;// Niebieski - 16 bitów w lewo 
// Tak oto dostaliśmy jeden z 16mln kolorów (256*256*256 kombinacji) 
Canvas->Pen->Color=NowyKolor; // ustawiamy kolor pióra 
}
 
 
 
 
 
 
 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 11 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
 
Okno edycji kodu C++ funkcji Form1::UstKolor(void) 
 

 

 
 
Przejdź do widoku formularza (klawisz F12) i zaznacz kolejno trzy komponenty 
ScrollBar
 

Zmiana koloru kreślenia 

 
Powiązanie zdarzenia zmiany pozycji obiektu ScrollBar z wywołaniem funkcji 
UstKolor
 
Zaznacz kolejny obiekt ScrollBar 

 

 
Przejdź do okienka Obiect Inspector i zaznacz zdarzenie OnChange

 

 
Kliknij dwa razy i w oknie kodu C++ wpisz wywołanie funkcji UstKolor()
 
 
 
 
 
 
 

background image

12 

C++ Builder. Programowanie obiektowe. Ćwiczenie 3. 

______________________________________________________________________ 

 
Okno edycji kodu C++ funkcji Form1:: ScrollBar1Change 

 

 
PowyŜsze czynności musisz wykonać dla kaŜdego z trzech komponentów ScrollBar

 

 
Sprawdzamy działanie naszego projektu: 
Run 









 Run (F9) 

 

MoŜemy dowolnie wybierać kolor kreślonej linii!!!  

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 13 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 

III.

 

Podsumowanie 

 

Nasz projekt zawiera następujące obiekty: 
 

 

Paski przewijania:    

      

 TScrollBar *ScrollBar1; 
 TScrollBar *ScrollBar2; 

       

 TScrollBar *ScrollBar3; 

 

 

Etykiety: 

 

     TLabel *Label1; 

      

TLabel *Label2; 

     TLabel *Label3; 

 

 

Metody: 

 
FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, 
int X, int Y); 
FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,  
int X, int Y); 
FormMouseMove(TObject *Sender, TShiftState Shift, 
 int X, int Y); 
 ScrollBar1Change(TObject *Sender); 
 ScrollBar2Change(TObject *Sender); 
 ScrollBar3Change(TObject *Sender); 

 

 

Zmienne:  

 

bool Rysuj; 

 

 

Funkcje: 

 

UstKolor(void);  

 
 
 
 
 
 
 
 
 
 
 
 

background image

14 

C++ Builder. Programowanie obiektowe. Ćwiczenie 3. 

______________________________________________________________________ 

  

IV.

 

DODATEK 

 

Klasa TCanvas 

 
Lista wybranych właściwości obiektu Canvas.  
 

Właściwość 

Opis 

Font 

Specyfikuje czcionkę (font) dla tekstu umieszczanego na obrazie. 
Obiekt klasy TFont dokładnie określa rodzaj fontu, jego rozmiar, 
kolor i styl.. 

Brush 

Określa kolor i wzór uŜywany do wypełnienia figur graficznych 
oraz tła.. Właściwości obiektu klasy TBrush specyfikują kolor i 
wzór lub mapę bitową uŜywaną do wypełnienia obszaru obiektu 
Canvas. 

Pen 

Specyfikuje rodzaj pióra uŜytego do rysowania linii lub obrysu 
kształtu.. Właściwości klasy TPen określają dokładnie kolor, styl, 
szerokość. 

PenPos  

Aktualna pozycja pióra.  

Pixels 

Specyfikuje kolor pikseli w obszarze aktualnego obiektu 
ClipRect. Jest to prostokątna tablica zadeklarowana jako 
__property TColor Pixels[int X][int Y].  

  
Lista wybranych metod obiektu Canvas
 

Metoda 

Opis 

Arc(int X1, int Y1, int X2, int Y2, int X3, int 
Y3, int X4, int Y4); 

Rysuje linię eliptyczną mieszczącą się w 
obszarze prostokątnym określonym przez 
punkty (X1,Y1) (X2,Y2); linia jest kreślona 
od punktu startowego (X3,Y3) do końcowego 
(X4,Y4).  

CopyRect(const TRect &Dest, TCanvas* 
Canvas, const TRect &Source); 

Kopiuje część obrazu z jednego obiektu 
Canvas do innego obiektu Canvas.  

Draw(int X, int Y, TGraphic* Graphic); 

Renderuje obiekt graficzny Graphic w 
Canvas na pozycji podanej przez (X, Y). 

Ellipse(int X1, int Y1, int X2, int Y2); 

Rysuje elipsę lub okrąg wpisany w obszar 
prostokątny określony przez punkty (X1,Y1) 
(X2,Y2) 

FillRect (const TRect &Rect); 

Wypełnia obszar prostokątny Rect uŜywając 
aktualnego wzoru. 

FrameRect (const Types::TRect &Rect); 

Rysuje  prostokąt – obramowanie uŜywa 
aktualnego wzoru. 

LineTo(int X, int Y); 

Rysuje linie od pozycji PenPos do punktu 
określonego przez X i Y, a potem ustawia 
pozycję pióra na wartość (X, Y). 

 
 

background image

C++ Builder. Programowanie obiektowe. Ćwiczenie 3.                                                 15 
______________________________________________________________________ 
 

 

©2004 Jerzy Kluczewski 

 

 

 
Lista wybranych metod obiektu Canvas (ciąg dalszy) 
 

Metoda 

Opis 

MoveTo(int X, int Y); 

Zmienia aktualną pozycję rysowania PenPos 
na (X,Y).  

Polygon(const TPoint * Points, const int 
Points_Size); 

Rysuje serie linii tworząc wielobok 
zamknięty. Parametr Points jest tablicą 
opisującą punkty węzłowe. Parametr 
Points_Size jest indeksem ostatniego punktu 
w tablicy. Pierwszy punkt zostaje połączony z 
ostatnim. 

Polyline(const Types::TPoint* Points, const 
int Points_Size); 

Rysuje serie linii – łączących kaŜdy punkt z 
punktów podanych w parametrze Points
Parametr Points_Size określa indeks 
ostatniego punktu w tablicy Points

Rectangle(int X1, int Y1, int X2, int Y2); 

Rysuje prostokąt – lewy górny naroŜnik 
określany jest jako punkt (X1, Y1) a dolny 
prawy to punkt (X2, Y2). 

RoundRect(int X1, int Y1, int X2, int Y2, int 
X3, int Y3); 

Rysuje prostokąt z zaokrąglonymi 
naroŜnikami. X3 – szerokość zaokrąglenia, 
Y3 – wysokość zaokrąglenia. 

TextHeight(const AnsiString Text); 
TextWidth(const AnsiString Text); 

Zwraca wysokość i szerokość jaką zajmuje 
łańcuch tekstowy na obrazie. Uwzględnia 
uŜytą czcionkę oraz spacje początkowe. 

TextOut(int X, int Y, const AnsiString Text);  Rysuje łańcuch tekstowy w obiekcie Canvas, 

od pozycji (X,Y), wartość PenPos ustawia na 
końcu łańcucha. 

TextRect(const Types::TRect &Rect, int X, 
int Y, const AnsiString Text); 

Rysuje łańcuch tekstowy wewnątrz regionu; 
część tekstu przekraczającego granice regionu 
zostanie obcięta.