borland cpp builder cw6


C++ Builder. Programowanie obiektowe. Ćwiczenie 6. 1
______________________________________________________________________
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
©2004 Jerzy Kluczewski
2 C++ Builder. Programowanie obiektowe. Ćwiczenie 6.
______________________________________________________________________
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.
______________________________________________________________________
©2004 Jerzy Kluczewski
C++ Builder. Programowanie obiektowe. Ćwiczenie 6. 3
______________________________________________________________________
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;
}
}
}
©2004 Jerzy Kluczewski
4 C++ Builder. Programowanie obiektowe. Ćwiczenie 6.
______________________________________________________________________
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)
______________________________________________________________________
©2004 Jerzy Kluczewski
C++ Builder. Programowanie obiektowe. Ćwiczenie 6. 5
______________________________________________________________________
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 )
©2004 Jerzy Kluczewski
6 C++ Builder. Programowanie obiektowe. Ćwiczenie 6.
______________________________________________________________________
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.
______________________________________________________________________
©2004 Jerzy Kluczewski
C++ Builder. Programowanie obiektowe. Ćwiczenie 6. 7
______________________________________________________________________
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.
Przejdz 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.
©2004 Jerzy Kluczewski
8 C++ Builder. Programowanie obiektowe. Ćwiczenie 6.
______________________________________________________________________
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++ ?
______________________________________________________________________
©2004 Jerzy Kluczewski


Wyszukiwarka

Podobne podstrony:
borland cpp builder cw1
borland cpp builder cw5
borland cpp builder cw10
borland cpp builder cw8
borland cpp builder cw3
borland cpp builder cw9
borland cpp builder cw2
borland cpp builder
borland cpp builder cw12
borland cpp builder cw11 algorytm
borland cpp builder cw4
borland cpp builder cw7
borland cpp builder cw13
SQL access in Borland C Builder

więcej podobnych podstron