1
Samouczek C++
Programowanie zdarzeniowe
Dr inż.Stanisław Lipski
2
Borland Builder 6.0
• Jak sterować aplikacją za pomocą
przycisków?
• Jak tworzyć i wykorzystywać okno
dialogowe TEdit?
• Krok po kroku!
3
Wybierz: File - > New Application
Uzyskasz pusty formularza Form1
KR
OK
1
4
Krok 1a
• Widzisz swoją formę Form1, Object TreeView
oraz Object Inspector.
• Object Inspector ma ono dwie zakładki:
Properties i Events.
• Wybierz arkusz Properties
• Odszukaj własność Caption i w polu obok wpisz
sobie nazwę Twojej własnej aplikacji.
• Odszukaj własność Color i w polu obok ustaw
sobie ulubiony kolor arkusza na którym chcesz
dalej pracować.
• W taki sposób tworzysz program nie wpisując ani
jednej linijki kodu, ale możesz go podpatrywać w
drugim oknie Unit1.cpp,które jest za Twoim
arkuszem.
• Wypróbuj inne własności arkusza.
5
Krok 2 - przyciski
• Na pasku zadań są zakładki w których mieszka
bardzo wiele możliwości. Zapoznaj się z nimi!
• W zakładce standard masz możliwość wstawiania
gotowego przycisku.
• Wystarczy kliknąć na niego a potem na arkusz.
• Zobaczysz gotowy przycisk z napisem Button1.
Wystarczy wiedzieć do czego ma służyć i potem
go opisać.
• Wypróbuj co możesz zrobić myszą z tym
przyciskiem!
6
Krok 3. Przeznaczenie przycisku
• Naciśnięcie przycisku ma na celu
zakończenie aplikacji
• Co należy zrobić?
• W tym celu należy:
- Opisać przycisk na arkuszu
- Wpisać kod polecenia w unit.cpp
Jeśli Twój przycisk ma zamykać aplikację to
:
7
Krok 3 – opis przycisku na arkuszu
8
Krok 3 – opis przycisku na arkuszu
• Wykorzystujesz Object Inspector.
• Wykorzystując własność Caption ustalasz
nazwę arkusza
• Wykorzystując własność Font ustalasz
napis na przycisku
• Możesz wykorzystać Label i wstawić tekst
w sąsiedztwie.
• Wypróbuj inne własności z Object
Inspector dla tego arkusza.
9
Zdarzenie
• Object Inspector ma dwie zakładki: Propertiwes i Events.
• Upewnij się że wybrana jest Forma i przejdź do zakładki
Events.
• Tam masz wszystkie zdarzenia które obsługuje forma
• W tym celu dla obsługi możesz wykorzystać zdarzenie
OnClick.
• Obsługę tego zdarzenia możesz zdefiniować w dwojaki
sposób – poprzez dwukrotnie kliknięcie na przycisku lub
wybranie w Object Inspector zakładki Events i dwukrotne
kliknięcie na puste pole obok napisu OnClick.
• Po wykonaniu jednej z wymienionych opcji zostanie
wygenerowana procedura obsługi zdarzenia OnClick dla
wybranego przycisku.
• Wystarczy uzupełnić ją poleceniem powodującym
wywołanie zaplanowanego zdarzenia.
10
Krok 4 – polecenie
• Jak klikniesz dwukrotnie w przycisk,
zobaczysz taki kod:
• Trzeba go uzupełnić!
void __fastcall
TForm1::Form1(TObject *Sender)
{
}
//--------------------
11
Krok 4 – polecenie
void __fastcall
TForm1::Form1(TObject *Sender)
{
Tutaj zrób trochę miejsca
}
//tutaj wpisz polecenie dla przycisku
12
Krok 4 – polecenie
• W tym konkretnym przypadku wystarczy
Close ();
• Następnie zapisz aplikację i uruchom
kompilator
• Jeśli wszystko wykonałeś bezbłędnie,
uruchom aplikację
• Zobaczysz swój przycisk który już jest
aktywny. Teraz czas bardziej
zawansowane programy!
13
Krok 4 – polecenie
14
Zadanie 1 do samodzielnego wykonania
• Napisać program, w którym zostaną
umieszczone 4 przyciski z napisami
• 3 z nich Czerwony, Zielony, Niebieski mają
spowodować, aby ich wciśnięcie
skutkowało zmianą tła formularza
odpowiednio na kolor czerwony, zielony i
niebieski.
• 4 – ma zamykać aplikację.
• Wypróbuj zmianę koloru przyciski i napisu
na nim.
15
Zadanie 2 do samodzielnego wykonania
• Utwórz nową aplikację, w której umieścisz komponent TLabel. W
Inspektorze Obiektów ustaw dla niego własności:
Caption=”Przyklad użycia komponentów z karty standard”, Font-
>Size=20.
• Umieść na formularzu komponent TGroupBox, a następnie zmień
jego własności: Caption=”Styl czcionki”, Font->Size=10.
• Na komponencie TGroupBox umieść cztery komponenty
TCheckBox. Zmień ich własności Caption odpowiednio na:
- Pogrubiona, Pochylona, Podkreślona, Przekreślona.
• Aplikacja będzie miała za zadanie zmieniać styl czcionki użytej w
komponencie TLabel w zależności od zaznaczenia stosownej opcji.
• Wskazówka: Wykorzystaj zdarzenie OnClick dla komponentu
TCheckBox i jego własności State oraz Checked. Posłuż się
własnością Font->Style komponentu Tlabel.
• Ustaw odpowiednio styl na fsBold (pogrubiony), fsItalic
(pochylony), fsUnderline (podkreślony), fsStrikeOut
(przekreślony).
• Przykład pochylania tekstu:
if (CheckBox2->Checked)
Label1->Font->Style=TFontStyles()<<fsItalic;
16
Zadanie 3
• Umieść na formularzu komponent TEdit.
• Usuń dla niego napis z własności Text.
• Następnie umieść przycisk (TButton) i ustaw jego
własność Caption na “Zmien napis”.
• Ustal działanie aplikacji tak aby naciśniecie
przycisku powodowało przepisanie tekstu z pola
edycyjnego do etykiety.
17
Rozwiązanie zad. 3
Wykorzystując okno dialogowe Edit chcę zmieniać napis tytułowy po
naciśnięciu przypisku.
Okno Edit ma pozostać aktywne i wprowadzenie nowego napisu i
ponowne naciśniecie przycisku znów zmieni napis.
18
Wskazówka:
• Wykorzystaj zdarzenie OnClick dla
przycisku:
• void __fastcall
TForm1::Button1Click(TObject *Sender)
• {
• Label1->Caption=Edit1->Text;
• }
19
20
Przed naciśnięciem
przycisku
Po naciśnięciu
przycisku
21
Zadanie 4
• Zaprojektuj formularz o przedstawionym poniżej
wyglądzie:
22
Rozwiązanie zad. 4.
• Na formularzu umieść komponent TPanel z zakładki Standard.
• Usuń dla niego wartość własności Caption.
• Następnie umieść trzy komponenty TTrackBar z zakładki Win32.
• Dla każdego z suwaków ustaw własności:
Min=0, Max=255, Frequency=5.
• W kolejnym kroku umieść trzy etykiety (komponent TLabel z
zakładki Standard) opisujące za pomocą liter R, G, B kolory jakie
reprezentują suwaki.
• Dla każdej z etykiet ustaw własności:
Font=Arial, Size=20, Style=fsBold,
• Następnie zmodyfikuj stosownie ich kolor tak aby R było napisane
kolorem czerwonym, G – zielonym, a B –niebieskim.
• Dla suwaka reprezentującego kolor czerwony obsłuż zdarzenie
OnChange wywoływane w momencie zmiany położenia wskaźnika
suwaka.
• Wykorzystaj funkcję RGB zwracającą na podstawie trzech
podanych wartości kolorów barwę wynikową.
• Do pobrania aktualnej pozycji wskaźników suwaka wykorzystaj
własność Position.
Rozwiązanie zad. 4 cd.
• Dla wygenerowania podglądu uzyskanej barwy
ustaw własność kolor panela. Posłuż się kodem:
Panel1->Color=(TColor) RGB(TrackBar1->Position,
TrackBar2->Position, TrackBar3->Position);
• Dla pozostałych dwóch suwaków zdefiniuj tak
zdarzenie OnChange, aby wywoływała się ta
sama funkcja co dla suwaka obsługującego kolor
czerwony.
• Ustaw tytuł okna na “Mieszacz kolorów”.
• Dołącz przycisk zamykający aplikację.
• Uruchom i przetestuj aplikację.
23
24
25
26
Uzupełnienie
• Spowoduj aby nastawy suwaków uwidaczniały się
wewnątrz barwnego panela. Niech się tam pokaże
tekst “(100,100,100)” opisujący wartości trzech
barw składowych.
• Wykorzystaj:
Panel1->Caption= "("+AnsiString(TrackBar1->
Position)+","+
AnsiString(TrackBar2->Position)+","+
AnsiString(TrackBar3->Position)+")";
27
Uzupełnienie
• Dodaj do formularza checkbox z opisem “Heksadecymalnie”
decydujący czy współrzędne mają się pokazać w systemie
szesnastkowym.
• Posłuż się funkcją IntToHex zamieniającą liczbę dziesiętną
na napis w systemie heksadecymalnym.
• Ponieważ ten sam kod byłby wykorzystywany zarówno w
przy zmianie stanu checkboxa jak i przy zmianie położenia
suwaka dlatego też zdefiniuj funkcję “Napis”.
• W tym celu otwórz plik nagłówkowy (naciśnij prawy klawisz
myszy na zakładce z nazwą otwartego pliku cpp i wybierz
Open Source/Header File).
• W części prywatnej klasy formularza zadeklaruj funkcję:
void Napis();
28
Uzupełnienie
• Wróć do pliku cpp i zdefiniuj ciało funkcji:
void TForm1::Napis()
{
if(CheckBox1->Checked)
Panel1->Caption="("+IntToHex(TrackBar1->Position,2)+
","+IntToHex(TrackBar2->Position,2)+","+
IntToHex(TrackBar3->Position,2)+")";
else
Panel1->Caption="("+AnsiString(TrackBar1->Position)+","+
AnsiString(TrackBar2->Position)+","+
AnsiString(TrackBar3->Position)+")";
}
• Następnie wywołaj ją w funkcji obsługi zdarzenia OnChange
dla suwaków oraz w funkcji obsługującej zdarzenie OnClick
dla chceckboxu.
29
Praca domowa.
Napisać samodzielnie program dla
aplikacji rozwiązującej dowolne równania kwadratowe.
30
Dziękuję za zainteresowanie
• stlipski@gmail.com