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