-
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).