background image

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 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

background image

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ęć.  

 
 
 
 

background image

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. 
 

 

 
 
 

background image

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
 

 

 
 
 
 
 
 
 
 
 
 
 
 

background image

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. 
 
 
 
 

background image

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. 
 
 
 
 
 
 

background image

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: 
 

 

 

 
 
 

background image

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” 

 

 
 

background image

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: 
 

 

 
 
 
 
 
 
 
 
 
 

background image

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”. 

background image

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 

 
 

background image

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