 
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.                                               1 
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
 
 
 
 
 
 
 
 
 
PROGRAMOWANIE OBIEKTOWE
ĆWICZENIE 10
 
 
 
 
C++ BUILDER 6.0 PE
 
 
•
Pasek menu
•
Pasek narzędziowy
•
Obiekt MainMenu
•
Obiekt ToolBar
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.
______________________________________________________________________
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
I.
Wstęp
Zanim rozpoczniesz ćwiczenie, utwórz jakiś podkatalog w katalogu Projects oraz
skopiuj do niego następujące pliki z ćwiczenia nr 9:
•
edytor.bmp
•
jasnosc.bmp
•
koniec.bmp
•
kontrast.bmp
•
krawedzie.bmp
•
nasycenie.bmp
•
negatyw.bmp
•
open.bmp
•
relief.bmp
•
rgb.bmp
•
rozmycie.bmp
•
save.bmp
•
saveas.bmp
•
szarosci.bmp
•
wyostrzenie.bmp
•
ToolBar9.bpr
•
ToolBar9.cpp
•
ToolBar9.res
•
ToolBar9Unit1.cpp
•
ToolBar9Unit1.h
•
ToolBar9Unit1.dfm
•
FotoEdit.ico (z dyskietki)
Zmień nazwy plików: 
 
•
ToolBar9.bpr
na
FotoEdit.bpr
•
ToolBar9.cpp
na
FotoEdit.cpp
•
ToolBar9.res
na
FotoEdit.res
•
ToolBar9Unit1.cpp
na
FotoEditUnit1.cpp
•
ToolBar9Unit1.h
na
FotoEditUnit1.h
•
ToolBar9Unit1.dfm
na
FotoEditUnit1.dfm
 
Nasz projekt aplikacji zapiszemy w plikach rozpoczynających się od nazwy 
FotoEdit. Zmień tytuł formularza Form1 na Foto Edytor. 
 
 
Celem niniejszego ćwiczenia jest zaprojektowanie edytora grafiki słuŜącego do 
prostego retuszu zdjęć.
 
 
 
 
 
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.                                               3 
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
 
 
II.
Tworzenie podstawowych obiektów
Wstawianie obiektów OpenPictureDialog1, SavePictureDialog1
 
Wstawiamy następujące obiekty do formularza: 
 
•
OpenPictureDialog
•
SavePictureDialog
 
Z zakładki Dialogs wybieramy odpowiednie komponenty i kładziemy je na formularz.  
 
 
OpenPictureDialog1,  SavePictureDialog1: 
 
 
 
Wstawianie obiektu StatusBar1
 
 
Z zakładki Win32 wybieramy komponent StatusBar (czyli pasek stanu) i kładziemy go 
na formularz. 
 
 
StatusBar pojawi się na dole formularza. 
 
 
 
 
 
4
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.
______________________________________________________________________
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
 
 
Wstawianie obiektu Image1
 
 
Z zakładki Additional wybieramy komponent Image (czyli obraz) i kładziemy go na 
formularz. 
 
 
Ustawiamy jego rozmiary tak, aby pokrywał cały wolny obszar roboczy formularza. 
 
 
Zmiana właściwości obiektu Image1
 
Wszystkie właściwości w Anchors ustawiamy na true. 
 
 
Nazwę obiektu (właściwość Name) zmieniamy na img. 
 
 
Właściwość Stretch (rozciąganie) ustawiamy na true. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.                                               5 
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
 
III.
Projektowanie zdarzenia „Otwórz”
Modyfikujemy obiekt MainMenu1
 
Zaznaczamy MainMenu1: 
 
 
klikamy prawym przyciskiem myszy i uruchamiamy „Menu Designer”. 
 
 
W okienku „Menu Designer’a” wybieramy „Plik
Otwórz”.
 
Do zdarzenia „OnClick” przypisujemy metodę (z poprzednich ćwiczeń wiesz jak to 
zrobić automatycznie). Wpisujemy poniŜszy kod C++ do wnętrza metody 
TForm1::Otwrz1Click. 
 
  if( OpenPictureDialog1->Execute() ) 
  { 
     img->Picture->LoadFromFile( OpenPictureDialog1->FileName ); 
     if( !img->Picture->Bitmap->Empty ) 
     { 
     img->Picture->Bitmap->PixelFormat = pf32bit; 
     } 
  } 
 
UWAGA: ustawienie formatu grafiki na pf32bit powoduje Ŝe kaŜdy kolor jest 
reprezentowany przez trzy 8-bitowe składowe R,G,B. W sumie daje to ponad 16,7 
miliona kolorów. 
 
 
 
 
 
6
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.
______________________________________________________________________
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
 
 
Modyfikujemy obiekt ToolButton1
 
Zaznaczamy ToolButton1: 
 
 
Zmieniamy właściwość Caption tego obiektu na „&Otwórz” 
 
 
Zmieniamy właściwość MenuItem tego obiektu na „Otwrz1” (wybieramy ją z listy) 
 
 
W ten sposób przyporządkowaliśmy klinięcie w przycisk do istniejącej juŜ (ale 
pośrednio – za pomocą MainMenu1) metody którą steruje otwieraniem pliku. 
 
 
 
 
 
 
 
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.                                               7 
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
Testowanie działania obiektu ToolButton1
 
Uruchom projekt i sprawdź jak działa menu oraz przycisk na pasku narzędziowym: 
 
 
 
Po wczytaniu pliku graficznego do edytora (tj. do obiektu img) mamy taki widok: 
 
 
 
 
 
8
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.
______________________________________________________________________
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
IV.
Projektowanie zdarzenia „Zapisz”
Modyfikujemy obiekt MainMenu1
 
Zaznaczamy MainMenu1: 
 
 
klikamy prawym przyciskiem myszy i uruchamiamy „Menu Designer”. 
 
 
W okienku „Menu Designer’a” wybieramy „Plik
Zapisz”.
 
Do zdarzenia „OnClick” przypisujemy metodę (z poprzednich ćwiczeń wiesz jak to 
zrobić automatycznie). Wpisujemy poniŜszy kod C++ do wnętrza metody 
TForm1::Zapisz1Click. 
 
SavePictureDialog1->FileName = OpenPictureDialog1->FileName; 
 if( SavePictureDialog1->Execute() ) 
   img->Picture->Bitmap->SaveToFile( SavePictureDialog1->FileName ); 
 
UWAGA: Obiekt pobiera nazwę pliku taką jaka została zapamiętana przez dialog 
otwierający plik. 
Modyfikujemy obiekt ToolButton2
 
Zaznaczamy ToolButton2: 
 
Zmieniamy właściwość Caption tego obiektu na „&Zapisz” 
 
 
 
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.                                               9 
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
Zmieniamy właściwość MenuItem tego obiektu na „Zapisz1” (wybieramy ją z listy) 
 
 
W ten sposób przyporządkowaliśmy klinięcie w przycisk do istniejącej juŜ (ale 
pośrednio – za pomocą MainMenu1) metody którą steruje zapisywaniem obrazu img 
do pliku na dysku. 
 
 
Testowanie działania obiektu ToolButton2
 
Uruchom projekt i sprawdź jak działa menu oraz przycisk na pasku narzędziowym: 
 
 
 
 
 
 
 
 
 
 
 
 
10
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.
______________________________________________________________________
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
 
V.
Projektowanie zdarzenia „Zapisz
jako...”
Modyfikujemy obiekt MainMenu1
 
Podobnie jak w zdarzeniu poprzednim modyfikujemy obiekt MainMenu1z tym Ŝe 
zmiany dotyczyć teraz będą: 
 
W okienku „Menu Designer’a” dotyczy to pozycji  „Plik
Zapisz jako...”.
 
Do zdarzenia „OnClick” przypisujemy metodę TForm1::Zapisz1Click. o treści 
następującej (przepisz ją): 
 
SavePictureDialog1->FileName = ""; 
 if( SavePictureDialog1->Execute() ) 
   img->Picture->Bitmap->SaveToFile( SavePictureDialog1->FileName ); 
 
Dla obiektu ToolButton2 zmieniamy właściwość Caption tego obiektu na „&Zapisz 
jako...” oraz zmieniamy właściwość MenuItem tego obiektu na „Zapiszjako1” 
(wybieramy ją z listy). 
 
VI.
Projektowanie zdarzenia „Koniec”
Modyfikujemy obiekt MainMenu1
 
Zaznaczamy MainMenu1: 
 
klikamy prawym przyciskiem myszy i uruchamiamy „Menu Designer”. 
 
W okienku „Menu Designer’a” wybieramy „Plik
Koniec”.
 
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.                                               11 
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
 
Do zdarzenia „OnClick” przypisujemy metodę (z poprzednich ćwiczeń wiesz jak to 
zrobić automatycznie). Wpisujemy poniŜszy kod C++ do wnętrza metody 
TForm1::Koniec1Click. 
 
Application->Terminate(); 
 
UWAGA: PowyŜsza instrukcja powoduje, Ŝe obiekt Application zostaje natychmiast 
zakończony. 
 
 
VII.
Dodawanie modułu funkcji
Jak dodać do projektu gotowy moduł zawierający funkcje ?
 
Skopiuj z dyskietki dwa pliki: 
•
fotoretusz.h
•
fotoretusz.cpp
 
do katalogu zawierającego projekt Foto Edytora. 
 
 
UWAGA: 
 
Pliki te zawierają gotowe funkcje słuŜące do działań na podstawowych filtrach oraz 
efektach graficznych. Autorem ich jest  Paweł Brągoszewski, a kody źródłowe zostały 
opublikowane w czasopiśmie PC World Kompuer  numer 11/2003. 
 
Aby dodać kod źródłowy zawarty w powyŜszych plikach naleŜy wykonać polecenie 
 
Project
Add to Project... po czym wybrać odpowiedni plik i zatwierdzić.
 
 
VIII.
Projekt formularza FormJasnosc
 
 
Jak utworzyć nowy formularz ?
 
Do tego celu wykorzystujemy polecenie: 
 
Plik 
New
Form
 
 
 
12
C++ Builder. Programowanie obiektowe. Ćwiczenie 10.
______________________________________________________________________
______________________________________________________________________ 
 
©2004 Jerzy Kluczewski
 
Następnie zapisujemy go do pliku (Plik
Zapisz jako...)
 
Nadajemy mu nazwę UnitJasnosc.cpp 
 
W „Obiect Inspectorze” zmieniamy jego właściwości: 
 
 „Caption”  
na „Jasność”
„Name”
na „FormJasnosc”
 
 
Zawartość formularza FormJasnosc
 
Nasz nowy formularz będzie oknem z dwiema miniaturami grafiki, które umoŜliwi nam 
wygodne dopasowanie jasności kolorów. 
 
 
 
Zawiera on : 
•
trzy etykietki Label1, Label2, Label3, (zakładka Standard)
•
dwa obiekty graficzne rys1, rys2 typu TImage, (zakładka Additional)
•
obiekt tbJasnosc typu TTrackBar, (zakładka Win32)
•
obiekt edJasnosc typu TEdit (zakładka Standard)
•
oraz dwa przyciski BitBtn1, BitBtn2 typu TBitBtn (zakładka Additional).
 
Przechodzimy do formularza FormJasnosc i wstawiamy powyŜsze obiekty – ich 
połoŜenie oraz rozmiary dopasowujemy według powyŜszego rysunku. 
 
 
 
TU SKOŃCZYŁEM