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.