borland cpp builder cw6

background image

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

©2004 Jerzy Kluczewski










PROGRAMOWANIE OBIEKTOWE

ĆWICZENIE 6




C++ BUILDER 6.0 PE


Projektowanie prostych dywanów

Obiekt TForm

Obiekt TCanvas

Zdarzenie OnPaint

Typ TColor

Funkcja sin()

Funkcja RGB()

Właściwość TCanvas->Pixels













background image

2

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

______________________________________________________________________

______________________________________________________________________

©2004 Jerzy Kluczewski


I.

Wstęp

Wykonamy teraz piękny, wielobarwny dywan, który będzie kreślony w oknie

aplikacji.

Najpierw wygenerujmy nasz nowy projekt z pustym formularzem i zapiszmy go do
pliku Dywan6.bpr.


Nasz projekt plikacji zapiszemy w plikach rozpoczynających się od nazwy Dywan6.

Utwórz projekt aplikacji za pomocą polecenia File









New









Application


Zapisz projekt aplikacji za pomocą polecenia File









Save All ...

Zapisz projekt do plików:

formularza do Dywan6Unit1.cpp,

głównego pliku projektu Dywan6.bpr

Zmień tytuł formularza Form1 na Dywan6.







background image

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

©2004 Jerzy Kluczewski

II.

Kreślenie grafiki

Zdarzenie Form1









OnPaint


Zgodnie z regułami programowania, algorytm kreślenia umieszczamy w funkcji –
reakcji na zdarzenie OnPaint – „chcę rysować”. Daje to gwarancję, że grafika zostanie
automatycznie odświeżona, gdy formularz aplikacji będzie uaktywniony.

Wygenerujemy teraz funkcję w Object Inspector:


Ś

rodowisko przechodzi automatycznie do okna kodu funkcji TForm1::FormPaint :


Wpisujemy kod funkcji:

{
int i,j;
TColor kolor;

for( i = 0; i < ClientWidth; i++ )
{
for( j = 0; j < ClientHeight; j++ )
{
kolor = (TColor) (i * j * 3) % 100000;
Canvas->Pixels[i][j] = kolor;
}
}
}

background image

4

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

______________________________________________________________________

______________________________________________________________________

©2004 Jerzy Kluczewski


Jak działa funkcja TForm1::FormPaint ?


Deklaracja zmiennych pomocniczych: i, j, typu int – oznacza że zmienne te należą do
zbioru liczb całkowitych.

Deklaracja zmiennej: kolor, typu TColor – oznacza że zmienna ta przechowuje rodzaj
koloru kreślonego piksela.

int i,j;

TColor kolor;


Pętla zewnętrzna for przesuwa współrzędną poziomą piksela od pozycji 0 do pozycji
(ClientWidth-1).

for( i = 0; i < ClientWidth; i++ )



UWAGA:
Zmienne ClientWidth, ClientHeight określają rozpiętość powierzchni graficznej
okienka (rozdzielczość wewnętrzna formularza From1). Z kolei zmienne Width, Height
oznaczają rozpiętość zewnętrzną okna (formularza), a więc razem z jego ramką
i paskiem tytułu.

Pętla wewnętrzna for przesuwa współrzędną pionową piksela od pozycji 0 do pozycji
(ClientWidth-1).

for( j = 0; j < ClientHeight; j++ )



Przed kreśleniem każdego piksela określany jego kolor za pomocą wzoru:
kolor = (TColor) (i * j * 3) % 100000;

Napis powoduje konwersję typu int na typ TColor natomiast operator % oblicza
jedynie wartość całkowitą ilorazu..

Operacja następna wstawia do tablicy pikseli Pixels znajdujących się w obiekcie
Canvas, odpowiedni kod koloru :
Canvas->Pixels[i][j] = kolor;

Teraz nadszedł czas na przetestowanie naszej aplikacji:

Uruchom ją za pomocą polecenia Run









Run (F9)




background image

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

©2004 Jerzy Kluczewski


Wygląd okna aplikacji


Po uruchomieniu nasze okno wygląda następująco:




III.

Wzbogacanie naszej aplikacji

Tworzenie ekranowego koloru


Tak naprawdę tworzenie każdego koloru na ekranie polega na wybieraniu amplitudy
trzech składowych: Red – czerwonej, Green – zielonej, Blue – niebieskiej.

Aby wykorzystać tę metodę, do dyspozycji mamy funkcję RGB().

Składnia tej funkcji wygląda następująco:

TColor RGB( int r, int g , int b )

background image

6

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

______________________________________________________________________

______________________________________________________________________

©2004 Jerzy Kluczewski




Wykasujmy teraz zawartość naszej funkcji TForm1::FormPaint (ale jej nagłówek
pozostawmy bez zmian)


Wpisujemy nową zawartość funkcji:

{
int i,j;
int r, g, b; // Składowe koloru: Red, Green, Blue
TColor kolor;

for( i = 0; i < ClientWidth; i++ )
{
for( j = 0; j < ClientHeight; j++ )
{
r = 255.0 * sin( (i + j) / 27.0);
g = 255.0 * ( sin( i / 23.0) - sin( j / 17.0 ) );
b = r + g;
kolor = (TColor) RGB( r, g, b);
Canvas->Pixels[i][j] = kolor;
}
}
}



Uruchom aplikację za pomocą polecenia Run









Run (F9)


Okienko kompilacji projektu poinformowało nas, że w projekcie istnieje 1 błąd.

Usuwanie błędu


Kliknijmy w OK i w oknie kodu mamy zaznaczoną linię w której popełniono błąd.

Na dole jest też opis rodzaju błędu – przyjrzyjmy się mu.



background image

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

©2004 Jerzy Kluczewski



Otóż w linii 27 pliku Dywan6Unit1.cpp wystąpił błąd „Call to undefined function sin
(wywołanie niezdefiniowanej funkcji sin)


Nie jest nic dziwnego, ponieważ C++ Builder nie wie w jakiej bibliotece gotowych
funkcji ma szukać funkcji matematycznej sinus. Aby projekt był kompletny należy go
poinformować, że będziemy używać funkcji matematycznych.


Przejdź do pierwszych linii w oknie kodu i na linią dyrektywy
#include "Dywan6Unit1.h"

dopisz dyrektywę
#include "math.h"

Teraz spróbuj skompilować projekt (Ctrl+F9) albo Project

 Build Dywan6.



background image

8

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

______________________________________________________________________

______________________________________________________________________

©2004 Jerzy Kluczewski



Wygląd okna aplikacji


Uruchom aplikację za pomocą polecenia Run









Run (F9)


Po uruchomieniu nasze okno wygląda następująco:


Sens kropek i zer


Usuń z wszystkich wartości numerycznych kropki i zera (np. zmień 17.0 na 17 itd.).

Uruchom projekt i przyjrzyj mu się – jak będzie wyglądał dywan.

Czy potrafisz wytłumaczyć sens kropek i zer w języku C++ ?


Wyszukiwarka

Podobne podstrony:

więcej podobnych podstron