Po spu╣t∞nφ C++ Builderu (p°φkazem
Start
| Programs | Borland C++ Builder 3 | C++ Builder ) jsou na obrazovce
zobrazena tato okna: okno Builderu (je umφst∞no
u hornφho okraje obrazovky),
okno Inspektora objekt∙ (je v levΘ Φßsti
obrazovky),
okno nßvrhovΘho formulß°e
a okno Editoru k≤du formulß°e (poslednφ
z t∞chto oken je p°ekryto p°edposlednφm).
Okno Inspektora objekt∙ mß dv∞ strßnky
(viz obrßzek naho°e): strßnku Properties (vlastnostφ)
a strßnku Events (udßlostφ). Nejprve se budeme
zab²vat strßnkou vlastnostφ. Jsou zde uvedeny r∙znΘ vlastnosti formulß°e.
Mezi d∙le╛itΘ vlastnosti formulß°e pat°φ vlastnosti Height
(v²╣ka)
a Width (╣φ°ka). Zm∞≥te ta╛enφm my╣i na obrazovce
rozm∞ry okna formulß°e a sledujte, jak se tyto zm∞ny projevujφ na odpovφdajφcφch
vlastnostech v okn∞ Inspektora objekt∙. Lze
to provΘst i obrßcen∞. Kdy╛ zm∞nφme n∞kterou z t∞chto vlastnostφ v Inspektoru
objekt∙, zm∞nφ se i rozm∞r formulß°e.
Dal╣φ d∙le╛itΘ vlastnosti urΦujφ pozici formulß°e na obrazovce. Jsou to
vlastnosti Left (vzdßlenost od levΘho okraje
obrazovky) a Top (vzdßlenost od hornφho okraje
obrazovky). P°esv∞dΦte se, ╛e to funguje stejn²m zp∙sobem jako u rozm∞r∙
formulß°e.
Vlastnost Caption (titulek okna) urΦuje text
zobrazen² v hornφm °ßdku formulß°e (okna). Zm∞≥te tento titulek na Normßlnφ
okno (p°epφ╣eme jej v Inspektoru
objekt∙).
Vlastnost Color (barva formulß°e) se urΦuje
pomocφ symbolick²ch konstant. Zjist∞te, jakß jmΘna majφ tyto konstanty.
Nejd∙le╛it∞j╣φ vlastnostφ je vlastnost Name (jmΘno).
Pomocφ tΘto vlastnosti se odkazujeme na formulß°, p°φpadn∞ na jinΘ objekty
umφst∞nΘ na formulß°i. Hodnota tΘto vlastnosti musφ b²t identifikßtor.
Tzn. nelze zde nap°. pou╛φvat mezery, pφsmena s diakritikou. Hodnotu tΘto
vlastnosti vytvß°φ Builder, ale m∙╛eme ji zm∞nit.
Vytvo°enou aplikaci m∙╛eme kdykoliv spustit a prohlΘdnout si tak v²sledky
svΘ prßce. Provedeme to volbou Run | Run. Po provedenφ p°ekladu
(trvß to n∞kolik sekund) se na obrazovce zobrazφ nß╣ formulß° jako okno
(zatφm prßzdnΘ), se kter²m m∙╛eme b∞╛n²m zp∙sobem manipulovat (p°esouvat,
m∞nit jeho velikost apod.). Uzav°enφm okna se op∞t dostaneme do v²vojovΘho
prost°edφ Builderu.
Na formulß° m∙╛eme vklßdat r∙znΘ komponenty. Pou╛φvßme k tomu Paletu
komponent, kterß je umφst∞na v pravΘ dolnφ Φßsti okna Builderu (mß
n∞kolik strßnek: Standard, Additional, atd.). Paleta komponent je tvo°ena
°adou tlaΦφtek, ukßzßnφm my╣φ na tlaΦφtko zobrazφme jeho nßzev. Nalezn∞te
tlaΦφtko s nßzvem Button (je na strßnce Standard
╣estΘ zleva).
Komponentu na formulß° vlo╛φme tak, ╛e kliknutφm vybereme komponentu na
Palet∞
komponent a dal╣φm kliknutφm ji umφstφme na po╛adovanΘ mφsto formulß°e.
Vlo╛te na formulß° komponentu Button (tlaΦφtko).
Jestli╛e vlo╛enß komponenta je vybrßna (je obklopena zßchytn²mi ΦtvereΦky),
pak m∙╛eme m∞nit jejφ velikost a umφst∞nφ a to stejn²m zp∙sobem, jako jsme
to m∞nili u formulß°e (Inspektor objekt∙ zobrazuje
vlastnosti vybranΘho objektu). Vlastnosti Top a
Left
se
nynφ vztahujφ k formulß°i. Vlastnost
Caption
komponenty
tlaΦφtka urΦuje text zobrazen² na tlaΦφtku. U na╣eho tlaΦφtka zm∞≥te tento
text na Zelen².
Dßle zapφ╣eme p°φkazy, kterΘ se majφ provΘst p°i stisknutφ tlaΦφtka (obsluha
udßlosti stisknutφ tlaΦφtka). Dvojit²m kliknutφm na tlaΦφtku vytvo°φme
kostru tΘto obsluhy udßlosti (jednß se o funkci, p°iΦem╛ Builder vytvo°φ
jejφ hlaviΦku a slo╛enΘ zßvorky pro zßpis t∞la funkce) a tato (zatφm prßzdnß)
funkce je zobrazena v Editoru k≤du s kurzorem
umφst∞n²m mezi { a }. Do tohoto mφsta budeme zapisovat p°φkazy, kterΘ se
majφ provΘst p°i stisknutφ tlaΦφtka. V na╣em p°φpad∞ sem zapφ╣eme p°φkazy:
Color = clGreen;
Caption = "ZelenΘ
okno";
Prvnφ p°φkaz zm∞nφ barvu formulß°e na zelenou (hodnotu konstanty barvy
clGreen
vlo╛φme
do vlastnosti Color) a druh² zm∞nφ titulek
formulß°e (vlo╛φ text - °et∞zec znak∙ - ZelenΘ okno
do
vlastnosti Caption; °et∞zec znak∙ je nutno zapisovat v uvozovkßch). Kdy╛
nynφ aplikaci p°elo╛φme a spustφme, pak po stisknutφ na╣eho tlaΦφtka tyto
akce prob∞hnou.
Vlastnosti objekt∙ tedy m∙╛eme m∞nit pomocφ Inspektora
objekt∙ (p°i nßvrhu), nebo p°φkazy jazyka C++ (za b∞hu aplikace).
Jestli╛e v programu zapφ╣eme n∞kter² p°φkaz chybn∞, pak je signalizovßna
chyba. Ud∞lejte v zapsan²ch p°φkazech n∞jakou chybu (nap°. vynechte n∞kter²
st°ednφk nebo zkomolte n∞kter² identifikßtor) a pokuste se aplikaci znovu
spustit. Podφvejte se na zp∙sob signalizace chyby. Chybu op∞t odstra≥te.
P°idejte na formulß° dal╣φ tlaΦφtka, nap°. tlaΦφtka ╚erven²,
Modr²
atd.
a zajist∞te, aby p°i stisknutφ z t∞chto tlaΦφtek se odpovφdajφcφm zp∙sobem
zm∞nila barva a nßzev formulß°e. Program vyzkou╣ejte.
Na formulß° p°idßme je╣t∞ tlaΦφtko, kter²m budeme moci formulß° uzav°φt
(ukonΦit b∞h programu). Toto tlaΦφtko nazveme nap°. Konec
a
obsluha stisku tohoto tlaΦφtka bude tvo°ena p°φkazem:
Close();
V okn∞ Editoru k≤du si m∙╛eme prohlΘdnout
vytvo°en² program (p°esn∞ji °eΦeno programovou jednotku formulß°e). Ka╛d²
formulß° mß svoji programovou jednotku. V tomto zdrojovΘm souboru jsou
uvedeny nßmi vytvo°enΘ obsluhy udßlostφ pro o╣et°enφ stisknutφ na╣ich tlaΦφtek.
Jestli╛e programovou jednotku formulß°e ulo╛φme do souboru (volba
File
| Save; zvolte nap°. adresß° C:\PRAC), pak Builder vy╛aduje pou╛itφ
p°φpony CPP. Ka╛d² formulß° mß mimo svΘ programovΘ jednotky dal╣φ soubor,
obsahujφcφ popis vzhledu formulß°e (vlastnosti formulß°e a objekt∙ umφst∞n²ch
na formulß°i). Tento soubor mß p°φponu DFM, jednß se o binßrnφ soubor,
kter² si b∞╛n²m zp∙sobem nem∙╛eme prohlΘdnout (nenφ to ani pot°eba, nebo╗
vzhled formulß°e vidφme). JmΘno tohoto souboru je stejnΘ jako jmΘno programovΘ
jednotky formulß°e (li╣φ se pouze p°φponou). Implicitnφ jmΘno soubor∙ prvnφho
formulß°e je Unit1 (toto jmΘno m∙╛eme p°i
uklßdßnφ soubor∙ zm∞nit). Existuje je╣t∞ hlaviΦkov² soubor formulß°e. Jeho
implicitnφ jmΘno je Unit1.H.
Projekt obsahuje mimo souboru programovΘ jednotky formulß°e, hlaviΦkovΘho
souboru formulß°e a souboru vzhledu formulß°e (t∞chto trojic soubor∙ m∙╛e
b²t i vφce, sklßdß-li se projekt z vφce formulß°∙) i soubory projektu.
Ka╛d² projekt mß t°i projektovΘ soubory, kterΘ jsou vytvß°eny a udr╛ovßny
Builderem a my bychom je nem∞li m∞nit. Tyto soubory majφ p°φpony
BPR, CPP a RES. Implicitnφ jmΘno je Project1.
Je
vhodnΘ ka╛d² projekt uklßdat do samostatnΘho adresß°e. V╣echny soubory
projektu a formulß°∙ ulo╛φme p°φkazem File | Save All. Po zadßnφ
p°φkazu se nßs Builder ptß na jmΘna programov²ch jednotek a jmΘno projektov²ch
soubor∙ (zde zadßvßme specifikaci souboru s p°φponou BPR). Vytvo°en² projekt
ulo╛te do adresß°e C:\PRAC\PR1 (pro soubory pou╛ijte implicitnφ jmΘna).
Po ulo╛enφ projektu jej znovu p°elo╛te a vyzkou╣ejte. Podφvejte se takΘ
do adresß°e C:\PRAC\PR1 jakΘ obsahuje soubory. Je zde takΘ soubor s p°φponou
EXE. Tento soubor obsahuje nß╣ p°elo╛en² projekt. M∙╛eme jej spustit p°φmo
ve Windows (nenφ nutno jej spou╣t∞t z prost°edφ Builderu). Vyzkou╣ejte.
Dßle zaΦneme vytvß°et nov² projekt. K otev°enφ novΘho projektu pou╛ijeme
p°φkaz File | New Application. Tφm vytvo°φme prßzdnou aplikaci (jako
p°i spu╣t∞nφ Builderu). Do st°edu formulß°e vlo╛φme komponentu
Edit
(Φtvrtß
zleva na strßnce Standard Palety komponent).
Kdy╛ nynφ na╣φ aplikaci
spustφme m∙╛eme do tΘto komponenty zapisovat libovoln² text. P∙vodnφ text
zobrazen² v tΘto komponent∞ byl Edit1, je
to hodnota vlastnosti Text tohoto editaΦnφho
ovladaΦe. Zru╣φme hodnotu tΘto vlastnosti v Inspektoru
objekt∙ a v ovladaΦi nebude nic zobrazeno.
V na╣i aplikaci budeme zji╣╗ovat poΦet znak∙ zapsanΘho textu. Pot°ebujeme
tedy vypisovat v²sledek. K v²pisu pou╛ijeme komponentu
Label
(t°etφ
zleva).
Umφstφme tuto komponentu na formulß° pod editaΦnφ komponentu.
Implicitnφ text je Label1, je to hodnota vlastnosti
Caption.
Zru╣φme tento text (po zru╣enφ textu komponenta Label
nebude
vid∞t). Titulek formulß°e zm∞nφme na Zji╣╗ovßnφ dΘlky
textu .
Na formulß° p°idßme je╣t∞ tlaΦφtko, jeho╛ stisknutφ spustφ proces zji╣t∞nφ
dΘlky zapsanΘho textu. TlaΦφtko vybavφme textem Zjisti.
Dßle musφme vytvo°it obsluhu udßlosti stisknutφ tlaΦφtka. V tΘto obsluze
zjistφme dΘlku textu metodou Length, kterou
aplikujeme na vlastnost Text instance editaΦnφho
ovladaΦe Edit1 (Edit1->Text.Length();
Edit1->Text je zapsan² text, a na tento text aplikujeme metodu tak, ╛e
jmΘno metody dopln∞nΘ zßvorkami zapφ╣eme za teΦku). Tφm zφskßme
Φφselnou hodnotu (Φφselnou hodnotu nelze p°φmo zobrazit; hodnota vlastnosti
Caption
je
typu AnsiString; °et∞zec znak∙), kterou musφme
p°evΘst na °et∞zec znak∙ konstruktorem AnsiString
(vytvo°φme
objekt tohoto typu). Aby se v²sledek zobrazil, je t°eba vytvo°en²
°et∞zec p°i°adit do vlastnosti
Caption komponenty
Label1.
Obsluha bude tedy tvo°ena p°φkazem:
Label1->Caption =
"PoΦet znak∙ = " + AnsiString(Edit1->Text.Length());
Jestli╛e pracujeme s vlastnostφ n∞jakΘ komponenty, pak zapisujeme jmΘno
komponenty, -> a jmΘno vlastnosti, kdy╛ pracujeme s vlastnostφ samotnΘho
formulß°e, pak zapisujeme pouze jmΘno vlastnosti (i v tomto p°φpad∞ bychom
mohli pou╛φt jmΘno formulß°e, nap°. Form1->Color).
Aplikaci m∙╛eme vyzkou╣et. Bylo by asi v²hodnΘ, aby p°i stisknutφ klßvesy
Enter v²poΦet dΘlky prob∞hl automaticky, abychom nemuseli maΦkat tlaΦφtko.
Zde vyu╛ijeme to, ╛e formulß° m∙╛e obsahovat jedno implicitnφ tlaΦφtko,
kterΘ se stiskne p°i stisku klßvesy Enter. Implicitnφ tlaΦφtko vytvo°φme
nastavenφm vlastnosti tlaΦφtka Default na
True
(zm∞nu
hodnoty False na
True
a
naopak v Inspektoru objekt∙ dosßhneme dvojit²m
kliknutφm na tΘto hodnot∞). Prove∩te toto vylep╣enφ na╣φ aplikace.
Nynφ se pokusφme tuto aplikaci zm∞nit a to tak, ╛e zobrazenß informace
o dΘlce textu bude p°i zapisovßnφ textu stßle aktualizovßna. V na╣i aplikaci
tedy zru╣φme tlaΦφtko a vyu╛ijeme to, ╛e p°i zßpisu ka╛dΘho znaku (zm∞n∞
textu v editaΦnφm ovladaΦi) vznikß pro editaΦnφ ovladaΦ udßlost OnChange.
Tato udßlost je implicitnφ udßlostφ editaΦnφho ovladaΦe a kostru jejφ obsluhy
m∙╛eme vytvo°it dvojit²m kliknutφm na editaΦnφm ovladaΦi. Obsluha tΘto
udßlosti bude tvo°ena stejn²m p°φkazem jako v p°edchozφ verzi byla obsluha
stisku tlaΦφtka. Aplikaci spustφme a vidφme, ╛e p°i zßpisu textu do editaΦnφho
ovladaΦe, se hodnota dΘlky textu stßle m∞nφ. Zajist∞te je╣t∞, aby tato
informace byla zobrazena i p°ed zahßjenφm zßpisu (nastavte hodnotu vlastnosti
Caption
komponenty
Label1).
ZaΦneme op∞t s novou aplikacφ. Na formulß° umφstφme editaΦnφ ovladaΦ, komponentu
ListBox
(okno seznamu °et∞zc∙) a dv∞ tlaΦφtka. Titulek formulß°e zm∞nφme na Demonstrace
seznamu, editaΦnφ ovladaΦ vyprßzdnφme a tlaΦφtka popφ╣eme &P°idat
a
&Vyprßzdnit
(znaky
& pou╛φvßme v popisu tlaΦφtek pro oznaΦenφ zkracovacφch klßves). TlaΦφtko
P°idat
nastavφme
jako implicitnφ. P°i stisku tlaΦφtka P°idat
vezmeme
text zapsan² v editaΦnφm ovladaΦi a p°idßme jej do seznamu °et∞zc∙. Vytvo°φme
tedy obsluhu stisknutφ tohoto tlaΦφtka s p°φkazem:
ListBox1->Items->Add(Edit1->Text);
Zde jsme pou╛ili metodu Add p°idßvajφcφ parametr
(text zapsan² do editaΦnφho ovladaΦe) do vlastnosti Items
(seznam
°et∞zc∙) komponenty ListBox1. Obdobn∞ vytvo°φme
obsluhu stisknutφ druhΘho tlaΦφtka (pou╛ijeme zde metodu
Clear
vlastnosti
Items;
je bez parametr∙ - za jmΘno metody zapφ╣eme prßzdnΘ kulatΘ zßvorky).
Kdy╛ na╣i aplikaci vyzkou╣φme, zjistφme n∞kolik nedostatk∙. Bylo by vhodnΘ,
aby po p°idßnφ textu do seznamu byl text v editaΦnφm ovladaΦi zru╣en. Dßle
by bylo vhodnΘ, aby po vlo╛enφ textu do editaΦnφho ovladaΦe jsme mohli
ihned zaΦφt psßt do editaΦnφho ovladaΦe dal╣φ text. Do obsluhy udßlosti
stisknutφ tlaΦφtka P°idat vlo╛φme p°φkazy
(za ji╛ zapsan² p°φkaz):
Edit1->Text = "";
Edit1->SetFocus();
Nynφ ji╛ na╣e aplikace pracuje uspokojiv∞. M∙╛eme ale p°ijφt s po╛adavkem,
aby seznam °et∞zc∙ byl uspo°ßdßn abecedn∞. Tento problΘm m∙╛eme vy°e╣it
pomocφ vlastnosti Sorted komponenty
ListBox
(nastavφme
ji v Inspektoru objekt∙ na
True).
Pokuste se provΘst tuto zm∞nu.
NovΘ pojmy:
Komponenta je prvek provßd∞jφcφ p°eddefinovanΘ funkce.
Vlastnost urΦuje chovßnφ nebo vzhled komponenty.
Udßlost je n∞co co nastane jako v²sledek interakce komponenty s
u╛ivatelem nebo operaΦnφm systΘmem.
Obsluha udßlosti je metoda vyvolanß aplikacφ jako reakce na udßlost.