Cvičení 3
Jednou z nejužitečnějších komponent je komponenta
Timer na paletě Systém. Jak z názvu vyplývá, tato komponenta slouží k časování. Je-li zapnuta, způsobuje pravidelné události v nastaveném cyklu.Úmyslně je zdůrazněna cykličnost časovače, protože to je jeho největší výhoda – ale také současně jeho největší slabina a riziko. Stačí málo, aby se neobsloužené události nahromadily, a jakmile dojde k přetečení zásobníku, je havárie systému nasnadě. Je to ukázáno
v tomto příkladu.Mnohdy je spuštění aplikace komplikované a zdlouhavé. Za takové situace se často stává, že aplikace se stále ještě natahuje z disku, zatímco uživatel už dávno ztratil trpělivost, jsa přesvědčen, že počítač se opět zasekl. Typicky tato situace nastává při otevírání většího množství databázových souborů (viz následující semestr), což může být velmi časově náročné.
Aby se předešlo podobným nedopatřením, je zvykem hned při startu aplikace zobrazit formulář (obrazovku), která uživatele vhodným způsobem informuje, že program se teprve startuje. Tomuto druhu formuláře se říká
Splash Screen.Nejjednodušší způsob, jak
SplashScreen vyvolat, je použít ho jako modální formulář během aktivace pracovního formuláře, tzn. uvnitř obsluhy události OnActivate. Příklad, jak je možno to udělat, je zde.Seznam obrázků,
ImageList, se uplatní všude, kde je potřeba přistupovat k většímu počtu obrázků. S výhodnou pak k obrázkům lze přistupovat podle indexů (počínaje od nuly), jako by se jednalo o pole obrázků.Typické použití je v souvislosti se seznamem akcí
ActionList. Nejprve je potřeba umístit na formulář seznam obrázků a naplnit ho. Proto na seznam poklepeme myší a postupně jednotlivé obrázky přidáváme. Postup je názorně ukázán na tomto záznamu.Potom propojíme oba seznamy tak, že v
ActionList.Images se vybere příslušný ImageList.Poklepáním na ActionList otevřeme editační okno akcí. Postupně přidáváme akce a v Object Inspectoru vyplňujeme jejich vlastnosti, například tak, jak to ukazuje tento záznam. Kdybychom na akci poklepali myší, otevře se nám kostra procedury pro obsluhu této akce (na záznamu to ukázáno není). Tímto postupem připravíme všechny akce.
Nyní již můžeme akce používat. Například, kdybychom na formuláři měli tlačítka, můžeme je jednoduše propojit s akcemi tak, že u každého tlačítka vyplníme jeho vlastnost Action. Je to ukázáno na tomto příkladu. Všimněte si, že tímto propojením se všechno, co bylo připraveno v akci, naplní do tlačítka. Celý příklad je možno stáhnout zde.
Největší silou Delphi je schopnost pracovat s cizími komponentami, od kterých nemusí být k dispozici zdrojový kód. Jedná se o plné využití objektově-orientovaného přístupu. Protože komponenty nejsou jen
run-time kód, který by se projevoval až při běhu programu, ale protože komponenty musejí pracovat už v design-time, tedy ve fázi návrhu programu, je nutno je zakomponovat přímo do Delphi. Proto nestačí komponenty prostě nakopírovat do stejného adresáře s Delphi, ale musejí se do prostředí Delphi nainstalovat.Jednotlivé komponenty se instalují prostřednictvím menu Component-->Install Component. Ve formuláři, který se otevře, zadáme soubor s komponentou a její nainstalování proběhne už automaticky. Za zmínku stojí, že instalace komponent a zejména balíčků je dosti riskantní; velmi často vede k "naboření" celých Delphi s nutností kompletní přeinstalace. Nejčastějším problémem je, když se snažíme nainstalovat novou verzi komponenty, aniž bychom předtím odinstalovali verzi starou (což se dělá přes stejný formulář prostřednictvím menu Component-->Install Component). Jediná (ne vždy spolehlivá) ochrana je, před přidáváním komponent pečlivě zazálohovat celé Delphi.
Protože programy produkované z Delphi jsou značně objemné, mají Delphi zavedenou možnost poněkud zredukovat počet a velikost dodávaného kódu. Jde o to, že se vytvářejí určité "balíčky" navzájem provázaných DLL a knihoven, které se navzájem potřebují. Jestliže například náš program pracuje s databázemi, pak samozřejmě potřebuje databázový balíček - pokud s nimi nepracuje, balíček by byl zbytečný a zbytečně by zvětšoval objem programu. Delphi mají automaticky optimalizující linker, který do výsledného programu zařazuje jen ty balíčky, které jsou opravdu potřeba. Definovat, které komponenty a části budou obsaženy v kterém balíčku, je možno přes menu Component-->Install Packages. Práce s balíčky ovšem už přesahuje rozsah tohoto předmětu, proto se jimi nebudeme dále zabývat.
Podobně, pokud několik komponent používá společné DLL knihovny a další soubory, je výhodné zabalit je do "balíčku" a instalovat je jako jeden celek. Balíčky mají příponu DPK a jsou v zásadě dvou druhů - balíčky pro run-time a balíčky pro design-time.
Jedním z nejpoužívanějších balíků komponent je balík známý pod názvem RX-Library. Jedná se o kompilát komponent z mnoha, převážně ruských, zdrojů. Komponenty jsou vesměs dobře chodivé, velice užitečné a jejich jediným nedostatkem je, že k nim není dostatečná literatura. Nejnovější verzi komponent si lze zdarma stáhnout z
http://www.rxlib.com . Pro účely cvičení je kopie uložena zde.Postup instalace RX-Library
Dále popsaný postup instalace je nutno beze zbytku dodržet; těm, kdo se neradi diví, nedoporučuji zbytečně exp
erimentovat.Instalace RX-Library je tím úspěšně ukončena.
TRxDBLookupCombo
poskytuje inkrementální prohledávání seznamu okamžitě při zadávání z klávesnice. Seznam se přitom zobrazuje. LookupSource může být navázán na TTable, TQuery, TRxQuery nebo TQBEQuery. V takovém případě umí inkrementálně hledat i ve výsledku SQL Querry atd.
TRxDBLookupList
funkční obdoba TRxDBLookupCombo.
TRxDBComboBox
je zděděn z TDBComboBox a dovoluje zobrazit různé hodnoty z hodnot uložených v databázi, a to bez použití LookUp tabulky (rychlost). Používá se k zobrazení srozumitelných textů namísto kódovaných hodnot uložených v tabulce.
TRxDBGrid
má schopnost měnit barvu pozadí, barvu a druh fontu v jednotlivých buňkách, celých sloupcích a řádcích. Může uložit a načíst pořadí sloupců, zobrazit ikonky pro BLOBy, MEMO, OLE a obrázky. Dovoluje výběr (select) více řádků. Převádí nadpisy sloupců na tlačítka (Button).
TDBStatusLabel
zobrazuje stav DataSetu (pro všechny DataSety) a číslo aktuálního recordu (pro DBase a Paradox tabulky).
TDateEdit, TDBDateEdit (databázová verze)
dovoluje přímé zapisování datumu; vedle toho má tlačítko, přes který se vyvolá kalendář.
TQBEQuery
dovoluje aplikovat QBE (Query-By-Example, dotaz podle příkladu) jako v Paradoxu. Dovoluje SQL příkazy INSERT a UPDATE.
TRxQuery
zděděno z TQuery. Podporuje makra v SQL, která jsou podobná jako parametry, ale dovolují měnit SQL text i v případech, kdy to pa
rametry nedovolují.TSQLScript
dovoluje vícenásobné SQL příkazy v jednom SQL.
TRxDBFilter
zapouzdřuje schopnost BDE lokálně filtrovat recordy. Má událost OnFilter a lze v něm zadat podmínky pro filtrování StringList.
TDBProgress
zobrazí postup provádění B
DE operací (pro ty IDAPI drivery, které podporují call-back funkce).TDBIndexCombo
vizuální interface, dovolující uživateli jednoduchým způsobem měnit pořadí zobrazených dat v indexované tabulce. Když uživatel zvolí komponentu TDBIndexCombo, její rozvinova
cí seznam se zaplní všemi indexy (resp. jejich stringy DisplayName) z tabulky.TBDEItems, TDatabaseItems, TTableItems
jsou seznamy, naplněné (automaticky) odpovídajícími informacemi z BDE, tzn. seznamem databází, seznamem tabulek, seznamem sloupců atd.
TDBSecurity
realizuje nejobvyklejší dialogy pro databázové aplikace: Login Dialog (přihlašovací dialog) a Change Password Dialog (změna hesla).
TRxRichEdit
komponenta, dovolující pracovat s RTF formátem textu (Rich Text Format), tzn. s textem s různými druhy fontů, vazbou na OLE a podobně.
TRxDBRichEdit
databázová varianta TRxRichEdit, která dovoluje ukládat a číst RTF texty z databáze.
TAnimatedImage
Animovaný obrázek - pohybující se bitmapa. Umožňuje načíst Windowsovské animované kursory (*.ANI soubory).
TClipboardViewer
prohlížeč schránky.
TCurrencyEdit
editor umožňující zadávání peněžních částek.
TRxCalcEdit, TRxDBCalcEdit (databázová verze)
dovoluje vstup čísel a obsahuje tlačítko, po jehož stisknutí se rozbalí kalkulačka. Výsledky z kalkulačky se přenášejí do editačního okénka.
TPicClip
dovoluje pohlížet na bitmapu jako na sérii bitmapových obrázků, ke kterým se přistupuje podle jejich indexu.
TFormPlacement
komponenta, která si v registrech nebi v INI souboru zapamatuje polohu a nastavení formuláře, takže při následujícím spuštění aplikace se formulář objeví ve stejném stavu, v jakém byl ukončen.
TFormStorage
jako TFormPlacement, ale navíc dovoluje uložit i hodnoty jednotlivých vlastností (
properties) komponent umístěných na formuláři. Je to velmi důležitá komponenta. Pracuje i s komponentami třetích firem.TPageManager
komponenta pro usnadnění práce s vícestránkovými dialogy, jako jsou různé "wizzardy".
TColorComboBox
komponenta pro výběr barvy.
TFontComboBox
komponenta pro výběr fontu.
TRxLabel
komponenta, rozšiřující možnosti TLabel o stínování.
TTextListBox
následovník TListBox, který v případě potřeby automaticky zobrazuje horizontální SrollBar.
TRxSplitter
odděluje dvě oblasti formuláře, s možností měnit jejich velikost za běhu programu.
TRxSlider, TRxSwitch
graficky pojednané vypínače/přepínače s možností změny jejich vzhledu.
TRxSpinEdit, TRxSpinButton
komponenty pro rychlé zvětšování/zmenšování číselné hodnoty.
TSpeedBar
může být umístěn ke kterémukoliv okraje formuláře. Za běhu programu se může pomocí drop-in aktualizovat a upravovat. Dovoluje užívat plochá a průhledná tlačítka.
TComboEdit, TRxDBComboEdit (databázová verze), TFilenameEdit, TDirectoryEdit
edit-boxy vybavené tlačítkem. Uživatel může buď vyplnit edit-box, nebo si pomocí tlačítka vyvolat příslušný dialog, který mu usnadní výběr hodnoty.
TMemoryTable
implementuje databázovou tabulku v paměti počítače, což se příznivě projeví na její rychlosti. Je to standardní tabulka BDE, včetně operace Delete.
TRxMemoryData
napodobuje chování standardního DataSet, ale v paměti. Na rozdíl od TMemoryTable je nezávislá na BDE, tzn. lze ji použít i bez BDE.
TRxCheckListBox
komponenta s vícenásobnými zaškrtávacími políčky.
TRxSpeedButton
oproti standardní komponentě TSpeedButton poskytuje víc možností, jako je plochý vzhled, průhledné tlačítko, vazba na Timer a šedé vybarvení neaktivního buttonu.
TRxTimerList
komponenta poskytuje všechny funkce standardní komponenty TTimer a navíc výhody Windowsovského timeru, který dovoluje naprogramovat až 32767 událostí časovače. Komponenta se dá přizpůsobovat pomocí snadno ovladatelného editoru.
TAppEvents
je zapouzdření, které usnadňuje práci s vlastnostmi a událostmi objektu TApplication v době návrhu (
design-time).TRxFolderMonitor
komponenta dovoluje sledovat, zda nastaly nějaké změny ve specifikovaných adresářích a podstromech; nastanou-li změny odpovídající nastaveným filtrům, komponenta vyvolá událost.
TRxTrayIcon
velmi důležitá komponenta, která dovoluje aplikaci zmenšit do statické nebo animované ikonky v trayi (vpravo dole v systémové řádce Windows).
TRxClock, TSecretPanel, TRxDice, TRxCalculator, TStrHolder, TMRUManager, TRxWindowHook, TRxGradientCaption, TRxLoginDialog, TRxMemoryData
rozšířené komponenty, které navíc ke svým standardním protějškům mají navíc další vlastnosti, jako uživatelská menu a podobně.
TPicture, TGraphic
editory těchto komponent mají navíc tlačítka Copy a Paste, podporují ikonky ve schránkách, podporují oblíbené adresáře a v otevíracím dialogu dovolují použít preview.
Hint
editor této komponenty dovoluje vytvářet víceřádkové hinty.
Project Resource Expert
nástroj pro práci se soubory zdrojů (
resources). Lze ho vyvolat pomocí menu "Project --> Resources".