-
V několika nejbližších kapitolách se seznámíme se základními technikami
programování VCL (nebo si je zopakujeme). Tyto techniky se týkají:
-
práce s texty,
-
práce se seznamy řetězců,
-
přidávání grafiky do ovladačů,
-
tažení,
-
otevírání, ukládání a tisk souborů,
-
dalších informací o formulářích a
-
návrhu palet nástrojů.
V této kapitole se budeme zabývat technikami práce s textem. VCL poskytuje
mnoho metod a vlastností, které nám usnadňují manipulaci s textem v komponentách
Memo
a RichEdit. Některé z popsaných služeb je možno aplikovat i na editační
komponenty. V těchto počátečních kapitolách je uvedeno
mnoho příkladů, které jsou částmi příkladů uvedených dále. Tyto příklady
jsou zde pouze pro ilustraci probírané problematiky a není je možno zkoušet
samostatně. Uvedené příklady jsou zobrazeny modrou barvou.
V komponentě RichEdit nebo Memo uživatel může zarovnávat
text k pravému nebo levému okraji nebo text centrovat mezi okraji. K nastavení
zarovnávání textu používáme vlastnost Alignment komponenty. Zarovnávání
se uskuteční pouze v případě, kdy vlastnost WordWrap je nastavena
na true (při nastavení na false neexistuje pravý okraj).
Editační komponenta nepodporuje zarovnávání.
Komponenty RichEdit nebo Memo mohou obsahovat vodorovný,
svislý nebo oba posuvníky. Když je povoleno zalamování slov, pak komponenta
potřebuje pouze svislý posuvník. Pokud zalamování slov vypneme, pak komponenta
může také požadovat vodorovný posuvník, neboť text není omezen pravým okrajem
komponenty. Následuje obvyklá obsluha volby WordWrap (zalamování)
v nabídce:
void __fastcall TEditForm::Wordwrap1Click(TObject
*Sender)
{
Editor->WordWrap = !Editor->WordWrap;
//přepnutí zalamování
if (Editor->WordWrap)
Editor->ScrollBars = ssVertical;
else
Editor->ScrollBars = ssBoth;
Wordwrap1->Checked = Editor->WordWrap;
// označení prvku nabídky
}
Komponenty RichEdit a Memo ovládají své posuvníky různým
způsobem. Komponenta RichEdit svoje posuvníky skryje, pokud nejsou
zapotřebí, zatímco Memo je stále nechává zobrazené.
-
Většina aplikací provádějících zpracování textu umožňuje uživateli přesouvat
vybraný text mezi dokumenty a to i mezi dokumenty v různých aplikacích.
Objekt schránky v C++ Builderu zaobaluje schránku Windows a obsahuje metody
pro vystřižení, kopírování a přilepení textu (a dalších formátů, včetně
grafiky). Objekt schránky je deklarován v jednotce Clipbrd. Pro
přidání objektu Clipboard k aplikaci, vybereme jednotku, která schránku
používá a do jeho hlavičkového souboru přidáme
#include <Clipbrd.hpp>
Dříve než můžeme vložit text do schránky, musíme jej vybrat. Zvýraznění
vybraného textu je zabudováno do editačních komponent. Když uživatel vybere
text, pak je zobrazen zvýrazněně. Ke zpracovávání vybraného textu používáme
vlastnosti SelText, SelLength a SelStart.
Metoda SelectAll vybírá celý obsah komponenty RichEdit
nebo Memo. Je to obzvláště užitečné, pokud text přesahuje viditelnou
oblast komponenty. Obsluha volby Select All může vypadat takto:
void __fastcall TEditForm::Selectall1Click(TObject
*Sender)
{
Editor->SelectAll();
}
Aplikace C++ Builderu používající jednotku Clipbrd mohou pracovat
se schránkou Windows. Pro běžné operace se schránkou jsou zde metody CutToClipboard,
CopyToClipboard
a PasteFromClipboard. Pro zrušení vybraného textu v editační komponentě
je možno použít metodu
ClearSelection.
-
Často chceme v aplikacích zakázat volby v nabídce, které nejsou právě použitelné.
Např. v textovém editoru, pokud není právě vybraný žádný text, pak nelze
v nabídce Edit používat volby
Cut,
Copy a Delete.
Tím, že tyto volby zakážeme, informujeme uživatele, které volby právě nemůže
použít. Vhodným okamžikem pro povolení nebo zákaz prvků jedné nabídky je
kliknutí uživatele na prvku v řádku nabídky. V tomto okamžiku (dříve než
nabídka je zobrazena) můžeme opravit dostupnost prvků (tato událost vzniká
také při použití zkracovací klávesy). K zákazu prvku nabídky, nastavíme
jeho vlastnost Enabled na false.
Následuje příklad obsluhy události OnClick pro nabídku Edit.
Jsou zde povoleny prvky Cut, Copy a Delete, když v
editoru je vybrán text a volba Paste je povolena, pokud ve schránce
je vložen nějaký text.
void __fastcall TEditForm::Edit1Click(TObject
*Sender)
{
Paste1->Enabled = Clipboard()->HasFormat(CF_TEXT);
bool HasSelection = Editor->SelLength
> 0;
Cut1->Enabled = HasSelection;
Copy1->Enabled = HasSelection;
Delete1->Enabled = HasSelection;
}
Metoda HasFormat objektu schránky vrací informaci o tom, zda
schránka obsahuje objekt, text, obrázek nebo jiný formát. Voláním s parametrem
CF_TEXT
zjistíme, zda schránka obsahuje text.
V aplikacích jsou často používány místní nabídky. Umožňují uživateli
minimalizovat pohyb myši při používání častých voleb. V aplikacích textového
editoru, např. místní nabídka může obsahovat volby pro práci se schránkou.
Volby místní nabídky obsahují stejné obsluhy událostí jako odpovídající
volby hlavní nabídky. V místní nabídce nepoužíváme urychlovací nebo zkracovací
klávesy (používají se z hlavní nabídky).
V hlavní nabídce můžeme na základě současné situace zakázat některé
volby. Totéž je možno udělat i v místní nabídce. V místní nabídce to provádíme
v obsluze události OnPopup. Pokud v místní nabídce máme stejné volby
jako v některé nabídce hlavní nabídky, pak lze použít stejnou obsluhu pro
obě nabídky. Např.
void __fastcall TEditForm::Edit1Click(TObject
*Sender)
{
Paste1->Enabled = Clipboard()->HasFormat(CF_TEXT);
Paste2->Enabled = Paste1->Enabled;
bool HasSelection = Editor->SelLength
> 0;
Cut1->Enabled = HasSelection;
Cut2->Enabled = HasSelection;
Copy1->Enabled = HasSelection;
Copy2->Enabled = HasSelection;
Delete1->Enabled = HasSelection;
}
-
Vytvořte jednoduchý textový editor, ve kterém použijete informace uvedené
v předchozích bodech.
-
C++ Builder poskytuje různé nástroje pro vytváření formulářů,
dialogových oken a aplikací. Mezi tyto nástroje patří např. Zásobník objektů,
Průvodce dialogovým oknem a Průvodce aplikací. Nyní se seznámíme se Zásobníkem
objektů. Dialogové okno Zásobníku objektů je místo, kde můžeme vybírat
předdefinované objekty pro použití v naší aplikaci. Zásobník objektů je
tvořen textovým souborem BCB.DRO v adresáři BIN, který
obsahuje informace o objektech vložených do zásobníku. Jelikož zde na učebně
tento soubor je chráněn před zápisem, nepodaří se nám provést žádnou činnost
vyžadující modifikaci Zásobníku objektů (s možnostmi modifikace Zásobníku
objektů se tedy seznámíme pouze teoreticky).
Zásobník objektů je zobrazen automaticky po volbě File
| New. Jedná se o okno s titulkem New Items. Zásobník objektů
má několik stránek, každá z nich obsahuje jiné objekty využitelné v naších
aplikacích. V následující tabulce je uveden popis standardních stránek
a popis prvků které obsahují.
Stránka |
Popis |
New |
Umožňuje vytvářet novou aplikaci, konsolovou aplikaci,
formulář nebo jednotku zdrojového kódu pro použití v naší aplikaci. Také
umožňuje vytvářet další objekty, jako jsou balíčky, DLL, komponenty a datové
moduly. |
ActiveX |
Umožňuje vytvářet nové ovladače ActiveX, knihovny typů
apod. |
Forms |
Umožňuje vytvářet standardní formuláře z předvytvořených
formulářů jako je About box, stránky se záložkami, sestavy apod. |
Dialogs |
Nabízí několik základních typů dialogových oken. Také
obsahuje průvodce vytvářením dialogového okna. |
Projects |
Obsahuje projekty, od kterých můžeme odvozovat své aplikace.
Obsahuje také průvodce vytvářením aplikace. |
Data Modules |
Umožňuje volit z datových modulů v naší aplikaci. |
Business |
Obsahuje průvodce pro databázové formuláře, sestavy a
další aplikace. |
Pokud zobrazíme Zásobník objektů při otevřeném projektu,
pak Zásobník obsahuje další stránku s objekty tohoto otevřeného projektu.
To umožňuje rychlé opětovné použití formuláře nebo jiného objektu výběrem
v Zásobníku objektů.
Pod stránkami Zásobníku objektů jsou tři voliče (Copy,
Inherit
a Use), které určují, jak vybraný objekt má být implementován. V
závislosti na typu vybraného objektu mohou být některé z těchto voličů
zakázány. Např. na stránce New jsou zakázány všechny. Pro tuto stránku
je přípustná pouze volba Copy a není nutno ji tedy volit.
Pokud zvolíme volič Copy, pak C++ Builder vytváří
kopii vybraného objektu a umisťuje ji do aplikace. V tomto případě je možno
libovolně modifikovat volby objektu. Původní objekt v Zásobníku není ovlivňován,
neboť všechny modifikace jsou prováděny na kopii objektu v naší aplikaci.
Je to nejbezpečnější metoda použití objektu.
Použití voliče Inherit se podobá použití Copy
s jednou důležitou odchylkou. Nový objekt je stále vázán k původnímu objektu.
Pokud modifikujeme základní objekt, pak změny se projeví i v našem nově
vytvořeném objektu. Opačně to ale neplatí, nově vytvořený objekt lze modifikovat
bez ovlivnění původního objektu. Např. když do původního objektu přidáme
novou funkčnost, pak se projeví i v našem odvozeném objektu (pokud některé
naše změny ji nedovolí použít).
Volba Use se používá velmi zřídka. Objekt ze Zásobníku
je otevřen pro přímou editaci. Tuto volbu použijeme, když máme objekt uložen
v Zásobníku a chceme v něm provést trvalé změny.
Převzetí vybraného objektu ze Zásobníku závisí na několika
faktorech. Tyto faktory zahrnují typ vybraného objektu, zda je otevřen
projekt a zvolený volič. Pokud máme otevřenou aplikaci a zvolíme vytvoření
nové aplikace, pak jsme dotázáni zda před vytvořením nového projektu chceme
současný projekt uložit. Volba File | New Application je ekvivalentní
vytvoření nové aplikace ze Zásobníku objektů. Vytvoření nového formuláře
ze Zásobníku objektů závisí na tom, zda je otevřen projekt. Je-li projekt
otevřen, pak nový formulář je přidán k aplikaci, není-li projekt otevřen,
pak nový formulář je vytvořen jako samostatný formulář (takovýto formulář
musí být přidán k projektu později; nelze jej spustit samostatně). Tuto
možnost využijeme, když vytváříme nový formulář pro přidání do Zásobníku
objektů. Obdobně to platí i o ostatních objektech.
Okno zásobníku objektů je ovladač prohlížeče seznamu
podobný jako pravá strana Exploreru Windows. Máme tedy možnost objekty
Zásobníku zobrazit jako: Velké ikony (implicitně), Malé ikony, Seznam a
Detaily. Toto volíme v místní nabídce Zásobníku. V místní nabídce lze také
volit seřazení objektů (podle jména, popisu, datumu nebo autora).
-
Nyní se budeme zabývat jednotlivými činnosti se Zásobníkem objektů. Nejprve
si ukážeme vytváření nových objektů ze Zásobníku. Tuto činnost si ukážeme
na příkladu. Vytvoříme jednoduchou aplikaci s hlavním formulářem, dialogovým
oknem About a druhým formulářem. Začneme vývoj nové aplikace. Je zobrazen
prázdný formulář. Na formulář umístíme dvě tlačítka a změníme jejich vlastnosti
Caption
na About ... a Zobraz Form2. Zvolíme File | New, přejdeme
na stránku Forms, vybereme objekt
About box, ujistíme se,
že je nastaven volič Copy a stiskneme
OK. Modifikujeme podle
svých potřeb vytvořené dialogové okno (změníme ikonu, zadáme zobrazované
informace apod.). Opět zvolíme File | New, na stránce Forms
vybereme objekt Dual list box a stiskneme
OK. Nyní již můžeme
vytvořit obsluhy pro obě tlačítka. Program přeložíme a spustíme. Program
nic nedělá, ale ukazuje nám jak můžeme použít Zásobník objektů k rychlému
vytvoření prototypu aplikace.
-
Zásobník objektů umožňuje efektivně vytvářet naše vlastní objekty. Přidávání
objektů do Zásobníku zvyšuje produktivitu programování. To co jsme již
vytvořili, můžeme opakovaně používat. Není vhodné ukládat všechny vytvořené
formuláře do Zásobníku, ale pouze ty u nichž je naděje na časté používání.
Pokud máme vytvořen objekt, který chceme přidat do Zásobníku, pak v místní
nabídce Návrhového formuláře zvolíme Add To Reposity. V zobrazeném
dialogovém okně na levé straně je seznam současných formulářů a dalších
objektů v aplikaci. Zde je nejprve nutno vybrat objekt, který chceme přidat
do Zásobníku. Dále je nutno zadat titulek objektu (text zobrazovaný pod
ikonou v Zásobníku objektů), popis (poskytuje podrobnější informaci o objektu
- je zobrazován v Zásobníku při zobrazení detailů), jméno autora objektu
(standardní objekty mají jako jméno autora uvedeno Borland) a vybereme
stránku Zásobníku, na kterou bude vkládaný objekt umístěn. Můžeme volit
z existujících stránek, nebo zapíšeme jméno nové stránky. Ve spodní části
dialogového okna je tlačítko Browse, které můžeme použít k výběru
ikony použité pro reprezentaci objektu. Po vyplnění všech položek a výběru
ikony stiskneme tlačítko OK a objekt je přidán do Zásobníku na specifikovanou
stránku (v našem případě, v důsledku zákazu zápisu, se nám to nepodaří).
Přidaný objekt můžeme kdykoli použít. Informace o přidaném objektu obsahují
i adresářovou cestu k přidanému objektu. Pokud objekt přemístíme nebo zrušíme,
pak jej již dále není možno v Zásobníku objektů používat.
-
Přidání projektu do Zásobníku objektů se od přidání samostatného objektu
moc neliší. Pro přidání projektu zvolíme Project | Add To Repository
a zobrazeném okně zadáme požadované údaje. Jinak je činnost obdobná.
-
K údržbě stránek a objektů v Zásobníku objektů používáme
dialogové okno konfigurace Zásobníku objektů. Toto okno zobrazíme volbou
Tools
| Repository nebo volbou Properties v místní nabídce Zásobníku
objektů. Toto dialogové okno umožňuje rušit objekty a stránky v Zásobníku
objektů, přesouvat objekty z jedné stránky na jinou, měnit pořadí stránek
apod. Na levé straně okna je zobrazen seznam stránek. Když jednu stránku
vybereme, pak na pravé straně je zobrazen seznam objektů stránky. V seznamu
stránek není uvedena stránka New, která je neměnná a je vždy zobrazena
jako první. V seznamu je také uvedeno [Object Repository]. Je zde
seznam všech prvků všech stránek Zásobníku.
Dříve než můžeme editovat, rušit nebo přesouvat objekt,
musíme jej mít vybraný. Objekt můžeme vybrat kliknutím (v pravém seznamu).
Po výběru objektu jej můžeme editovat (stisknete tlačítko Edit Object
nebo
dvojitě klikneme na objektu). Při editaci objektu lze změnit jméno objektu,
popis, autora a také stránku na které je objekt zobrazen. Vybraný objekt
zrušíme stiskem tlačítka Delete Object. Jsme dotázáni na potvrzení
před odstraněním objektu ze stránky a ze Zásobníku. Zrušením objektu odstraníme
objekt ze Zásobníku, ale nezrušíme zdrojové soubory popisující objekt.
Objekty můžeme přesunout z jedné stránky na jinou pouhým přetažením objektu
ze seznamu objektů na požadovanou stránku v seznamu stránek.
Zatím jsme se zabývali správou objektů. Obdobné činnosti
lze také provádět se stránkami Zásobníku objektů. V levém seznamu vybereme
stránku a pro její zrušení stiskneme tlačítko Delete Page. Před
zrušením stránky, musíme z ní odstranit všechny objekty (lze zrušit pouze
prázdnou stránku). Novou stránku přidáme stiskem tlačítka Add Page.
Je zobrazeno okno, ve kterém zadáme jméno nové stránky. Pro přejmenování,
vybereme stránku, stiskneme tlačítko Rename Page a v zobrazeném
okně zadáme nové jméno stránky.
Konfigurační okno Zásobníku objektů také umožňuje nastavit
tři implicitní objekty:
-
Implicitní formulář použitý při volbě File | New Form,
-
Implicitní formulář použitý jako hlavní formulář při volbě
File
| New Application a
-
Implicitní projekt použitý při volbě File | New Application.
Pokud v seznamů objektů je vybrán formulář, pak pod seznamem
jsou dvě značky (New Form a Main Form), je-li vybrán projekt,
pak
pod seznamem je jedna značka (New Project). Implicitní objekty nastavíme
tak, že je vybereme (postupně) a označíme u nich příslušnou značku (každá
značka může být nastavena pouze u jednoho objektu).
Zrušením nastavení těchto značek se vrátíme k původním
objektům.
-
C++ Builder má zabudované průvodce vytvářením dialogových
oken a aplikací. Nejprve se budeme zabývat průvodcem vytvářením dialogových
oken. Pro spuštění průvodce vytvářením dialogových oken zvolíme File
| New, v Zásobníku objektů přejdeme na stránku Dialogs a vybereme
ikonu (dvojitě na ní klikneme) Dialog Wizard. První stránka průvodce
se nás dotazuje, zda chceme vytvořit jednostránkové nebo vícestránkové
dialogové okno. Ikona v levé části průvodce nám ve všech krocích ukazuje
vzhled vytvářeného okna. Po zadání volby stiskneme tlačítko Next.
Pokud jsme zvolili vytváření vícestránkového dialogového okna, pak další
stránka průvodce se nás dotazuje na jména jednotlivých stránek (zadáváme
je v editačním okně; každé jméno na jeden řádek). Po stisku tlačítka Next
přejdeme na poslední stránku průvodce. U jednostránkových dialogových oken
je druhá stránka průvodce vynechána. Na poslední stránce průvodce zadáváme
umístění tlačítek. Jsou zde tři volby: tlačítka v okně nechceme, tlačítka
pod sebou u pravého okraje a tlačítka vedle sebe u spodního okraje. Stiskem
tlačítka Finish ukončíme vytváření dialogového okna. Je vytvořen
základ okna, do kterého již všechnu funkčnost musíme dodělat běžným způsobem
sami. Průvodce je užitečný při vytváření vícestránkových dialogových oken.
Při vytváření jednostránkových oken můžeme volit přímo předefinovaný objekt
v Zásobníku objektů.
-
Pokuste se pomocí Průvodce vytvářením dialogových oken vytvořit nějaké
okno.
-
Průvodce vytvářením aplikace nám pomáhá k rychlému vytvoření
prototypu aplikace. Průvodce spustíme volbou File | New, v Zásobníku
objektů přejdeme na stránku Projects a dvojitě klikneme na ikonu
Application
Wizard. Na první stránce průvodce vybíráme prvky hlavní nabídky aplikace.
Můžeme zvolit přidání nabídek File, Edit,
Window a
Help
(nabídky
jsou v angličtině). Nabídka Window je vhodná pro MDI aplikace. Po
volbě požadovaných nabídek stiskneme tlačítko
Next a přejdeme na
další stránku.
Pokud jsme zvolili přidání nabídky File, potom
následující stránka slouží pro zadání filtrů souborových dialogových oken
(OpenDialog a SaveDialog). Stiskneme tlačítko Add
a přidáme nový filtr (popis filtru a filtr vyjádřený hvězdičkovou konvencí).
Tlačítka Edit,
Delete,
Up a Down můžeme použít
k editaci, zrušení nebo přesunu filtru v seznamu.
Další stránka průvodce vytvářením aplikace se týká vytváření
palety nástrojů aplikace (je zobrazena pouze pokud jsme k aplikaci přidali
nabídku). Toto je značně užitečná služba Průvodce. Umožňuje rychlé vytvoření
palety nástrojů z voleb nabídky. Na levé straně okna je seznam nabídek.
Po výběru některé nabídky, je na pravé straně okna zobrazen seznam voleb
této nabídky s doporučenými tlačítky pro jednotlivé volby. Pro přidání
tlačítka na paletu, vybereme tlačítko v seznamu a stiskem tlačítka Insert
jej vložíme na paletu (ukázka palety je zobrazena v horní části okna Průvodce).
Tlačítko
Space slouží pro přidání separátoru na paletu (slouží k
vizuálnímu oddělení skupiny tlačítek). Pokud se některé tlačítko z palety
rozhodneme odstranit, pak jej vybereme a stiskneme Remove. Průvodce
vytvářením aplikace také nastavuje krátké nápovědné texty pro tlačítka.
Čtvrtá a poslední stránka Průvodce vytvářením aplikace
umožňuje nastavit jméno programu, adresář pro uložení projektu naší aplikace
a několik dalších voleb. Zadávané jméno aplikace není jméno zobrazované
v dialogovém okně
Project Options, ale jméno projektového souboru.
Druhý editační ovladač slouží k zadání adresářové cesty k adresáři, ve
kterém projekt bude uložen (tlačítko Browse lze použít k nalezení
této cesty, případně vytvoření požadovaného adresáře). Ve spodní části
jsou tři značky. Horní z nich nastavíme, pokud vytváříme MDI aplikaci.
Další se týká vytvoření stavového řádku a poslední k povolení zobrazování
bublinkové nápovědy. Po zadání všech požadovaných údajů stiskneme tlačítko
Finish.
C++ Builder vytvoří aplikaci na základě specifikovaných voleb. Je také
vytvořen kód aplikace, který budeme muset ještě doplnit. Např. pro obsluhu
volby
File | Open byl vygenerován tento kód:
void __fastcall TMainForm::FileOpen(TObject
*Sender)
{
if (OpenDialog->Execute())
{
//---- Add code to open OpenDialog->FileName
----
}
}
-
Použití průvodců je rychlé a snadné. Vyzkoušejte si jejich použití a vytvořte
prototyp nějaké aplikace, kterou se dále pokuste dokončit (např. vytvořte
textový editor).
-
Vidíme, že C++ Builder dokáže rychle vytvořit prototyp Windowsovské
aplikace. K dokončení aplikace je zapotřebí doplnit ještě kód obsluh událostí
a přidat případně další potřebný kód. Nyní se seznámíme s tím, jak C++
Builder udržuje deklaraci třídy formuláře. Když vytvoříme nový formulář,
pak C++ Builder vytvoří tři soubory: soubor formuláře, zdrojový kód jednotky
a hlavičkový soubor jednotky. Při vytváření deklarace třídy formuláře v
hlavičkovém souboru, C++ Builder vytváří dvě sekce. První sekce je část
deklarace třídy, která je spravována C++ Builderem. Druhou sekci spravujeme
sami. Podívejme se na nějakou deklaraci třídy formuláře:
class TMainForm : public TForm
{
__published:
TMainMenu *MainMenu;
TMenuItem *FileNewItem;
TMenuItem *FileOpenItem;
TMenuItem *FileSaveItem;
TMenuItem *FileSaveAsItem;
TMenuItem *FileExitItem;
TOpenDialog *OpenDialog;
TSaveDialog *SaveDialog;
void __fastcall FormCreate(TObject
*Sender);
void __fastcall FileNew(TObject *Sender);
void __fastcall FileOpen(TObject *Sender);
void __fastcall FileSave(TObject *Sender);
void __fastcall FileSaveAs(TObject
*Sender);
void __fastcall FileExit(TObject *Sender);
private:
// private user declarations
public:
// public user declarations
virtual __fastcall TMainForm(TComponent*
Owner);
};
Na třetím řádku tohoto kódu vidíme klíčové slovo __published
(nejedná se o klíčové slovo C++, ale o rozšíření přidané C++ Builderem;
určuje přístup do třídy podobně jako private, protect nebo
public).
Od tohoto řádku až k příkazu private je část, která je udržována
C++ Builderem (tuto část bychom nikdy neměli sami modifikovat). Do zbývající
části deklarace (za klíčová slova private nebo public), můžeme
přidávat své vlastní deklarace datových složek a metod. Za private
zapisujeme soukromé složky a metody a za public veřejné složky a
metody. Definice metod potom zapisujeme do zdrojového souboru jednotky.
Někdy se dostaneme do situace, kdy potřebujeme zrušit
kód který vygeneroval C++ Builder. Např. na formuláři máme tlačítko, které
již nepotřebujeme. Vybereme jej a stiskneme klávesu Delete. Tím je tlačítko
zrušeno, ale nezrušili jsme zatím kód obsluhy události OnClick tohoto
tlačítka (je možné, že stejnou obsluhu bude využívat ještě jiná komponenta
formuláře). Pokud se rozhodneme zrušit i tuto obsluhu, pak musíme zrušit
definici funkce ve zdrojovém souboru a deklaraci funkce z hlavičkového
souboru (je v části spravované C++ Builderem). Toto je výjimka z pravidla,
že nikdy nesmíme modifikovat část deklarace formuláře spravovanou C++ Builderem.
Rychlejší a snadnější metoda k odstranění obsluhy události z našeho kódu
je zrušení všeho kódu v obsluze a uložení projektu. C++ Builder při ukládání
projektu (nebo při překladu) odstraňuje všechny prázdné obsluhy událostí.
Před odstraněním obsluhy je ale zapotřebí se ujistit, že žádná jiná komponenta
tuto obsluhu nepoužívá. Neexistuje ale žádná jednoduchá metoda, jak toto
zjistit.
-
Šablony komponent umožňují vytvořit, uložit a opětovně používat skupinu
komponent (nemusí to být skupina, může se také jednat o jednu komponentu).
V následujícím příkladě si ukážeme jak užitečné mohou být šablony komponent.
Standardní Windowsovský editační ovladač, stejně jako ostatní ovladače
Windows, má nějaké předdefinované chování. Součástí tohoto chování je i
způsob zpracování stisku klávesy Enter. Pokud uživatel stiskne klávesu
Enter v editačním ovladači, pak Windows hledá implicitní tlačítko v okně
(pokud je nalezne, pak jej stiskne). Někdy se ale dostaneme do situace,
kdy bychom dali přednost jinému chování. Např. v okně máme více editačních
ovladačů a při stisku klávesy Enter chceme přejít na další ovladač. Řešení
tohoto problému je poměrně jednoduché. Stačí pouze vytvořit obsluhu události
OnKeyPress
editačního ovladače:
void __fastcall TForm1::Edit1KeyPress(TObject
*Sender, char &Key)
{
if (Key == VK_RETURN) {
Key = 0;
PostMessage(Handle, WM_NEXTDLGCTL,
0, 0);
}
}
Tento kód testuje, zda uživatel stiskl klávesu Enter (VK_RETURN). Pokud
ano, pak nastaví hodnotu Key na 0 (tím zabráníme pípnutí, při stisku
Enter v editačním ovladači) a zašleme zprávu WM_NEXTDLGCTL. Tato zpráva
nastaví zaostření na další ovladač v Tab pořadí. Je to vše, co jsme potřebovali.
Po zápisu kódu můžeme komponentu uložit jako šablonu. Když to provedeme,
pak ji uložíme společně s kódem. Provedeme to takto: Umístíme komponentu
Edit
na prázdný formulář, změníme její vlastnost
Name na
EnterAsTab
a zapíšeme obsluhu události OnKeyPress. Tuto komponentu vybereme,
zvolíme Component | Create Component Template a v zobrazeném dialogovém
okně změníme jméno komponenty na TEnterAsTab. Ostatní informace
necháme beze změny a stiskem OK šablonu komponenty uložíme. Na Paletě
komponent je vytvořena stránka Templates s naší upravenou komponentou.
Můžeme ji nyní používat normálním způsobem.
Velkou výhodou šablon komponent je to, že kód zapsaný pro obsluhy události
komponenty je uložen společně s komponentou. Šablony komponent umožňují
vytvořit kolekci přizpůsobených komponent, které často používáme. I když
koncepce šablony komponenty pracuje také s jednou komponentou, byla původně
určena pro práci s více komponentami. Můžeme mít skupinu komponent, kterou
budeme umisťovat na formulář společně (vytvoříme šablonu z těchto komponent).