Odpovědi na otázky ze shrnutí 10. dílu (seznamy ve formuláři)
-
Jak se liší kombinované pole od seznamu? Kdy budou fungovat totožně?
Kombinované pole má tvar běžného textového pole, ale šipkou na pravém okraji můžeme rozvinout a zobrazit více hodnot. Seznam má větší velikost než textové pole a zobrazuje trvale více hodnot. Když ale nastavíte u prvku Seznam vlastnost Rozbalit na hodnotu Ano, bude se chovat stejně jako Kombinované pole. -
Uveďte aspoň dvě přednosti tvorby formuláře v režimu návrhu oproti použití průvodce.
Především se v minulém dílu ukázalo, že když použijete průvodce, jehož úlohou je ulehčit vám práci, udělat něco za vás, nemusí výsledek pracovat vždy správně. Převod kroků průvodce na výsledný produkt (např. formulář) tedy zatím v Base v některých případech nefunguje, a tomu se pak vyhneme použitím režimu návrhu. Práce v režimu návrhu může být také mnohdy rychlejší a přímočařejší než s průvodcem. No a některé věci prostě pomocí průvodce udělat nejdou. -
Uveďte dva problémy, se kterými jste se v tomto dílu u kombinovaného pole setkali, a zkuste vysvětlit
jejich příčinu a možnost jejich řešení.
Samostatná roletka, vytvořená pomocí průvodce, nemusí fungovat správně – nerozevírá se. I když ji ale vytvoříte v režimu návrhu, neaktualizuje se po výběru jiné položky formulář. To vyřeší makro, vysvětlené ve druhé části tohoto dílu.
Makra a jejich použití ve formuláři databáze Knihovna
Text tohoto dílu rozdělím do dvou částí.
- Seznámení s makry. Tato část je určena spíš pro začátečníky, obsahuje základní vysvětlení fungování maker v OpenOffice.org a příklad makra, který byste si mohli v rámci této přípravy vyzkoušet.
- Makro pro formulář s rozevíracím seznamem. Ve druhé části uvedu text makra, které je nutné pro fungování formuláře z předchozího dílu a způsob jeho zprovoznění.
První část: Seznámení s makry
Co je makro, zdroje informací
Pojem makro má víc významů. Nás zajímá makro jako malý program, který má v některém programu z kancelářského balíku provést jistou činnost. Ve velmi pěkné knize „OpenOffice.org – tipy a triky pro záznam a úpravu maker“ (budu ji značit zkratkou [Sobek]) píše autor Milan Sobek toto:
„Makra umožňují automatizovat rutinní operace, usnadňují zpracování a vyhodnocování dat.“
Július Pastierik ve své elektronické knize „Makrá v OpenOffice.org“ [Pastierik], o které jsem se zmínil v závěru předchozího dílu, píše o makrech v libozvučné slovenštině toto:
„Priznám sa, že nemám rád zbytočné definície, a preto si dovolím predstaviť makro v kancelárskom balíku OpenOffice.org ako program, pomocou ktorého si dokážeme uľahčiť našu prácu s týmto programom alebo program, ktorý nám rozširuje jeho možnosti. ... Vývojom makier pre OpenOffice.org sa zaoberá pomerne dosť programátorov, ktorí výsledky svojej práce poskytujú zadarmo, ako sme u open-source programov vlastne zvyknutí, vrátane zdrojových textov aj iným. Z mnohých zdrojov takýchto makier spomeňme aspoň www.ooomacros.org/index.php. Mnohí tu určite nájdu zaujímavé makrá, ktoré priamo dokážu využiť pre svoju potrebu, iní aspoň inšpiráciu pre vlastnú tvorbu.“
Makro má tedy urychlit a usnadnit některé složitější činnosti (obzvláště když je potřebujete provádět opakovaně) nebo umožní věci, které by bez maker možné nebyly, např. zobrazení dialogového okna, automatické zavření dokumentu po jisté události apod.
Nejběžněji se s makry pracuje asi v tabulkových procesorech (Calc, Excel...), mohou pomoci i v textových procesorech (Writer, Word…). Především makrům v Calcu je věnována kniha [Sobek], Writeru i Calcu je věnována kniha [Pastierik]. O makrech v Base bohužel česky zatím kniha asi nevyšla, k dispozici je anglicky psaná literatura (Roberto Benitez: „Databases Programming – OpenOffice.org Base & Basic“), elektronická kniha „Andrew Pitonyak: OpenOffice.org Base – Macro Programming“ a další internetové zdroje.
Příklady makra
V první části tohoto dílu uvedu dva příklady a jejich stručné vysvětlení, nadále je budu označovat jako cvičná nebo pokusná makra. První makro je velmi jednoduché, druhé složitější. Začátečník by si mohl jeden z příkladů vyzkoušet.
Pokud nemáte alespoň malé zkušenosti s programováním, nebudete asi všemu rozumět, ale o to tu nejde; stačí vědět, co makro zhruba je, kde ho najít a jak ho zapojit do aplikace. Proto vysvětlení kódu (příkazů) následujících maker můžete klidně přeskočit.
Příklad 1: Makro č. 1 by mohlo mít třeba takovýto text (zdrojový kód):
sub Upozorneni rem Vypíše upozornění, že na databázi se ještě pracuje print "Dobrý den. Tato databáze není ještě hotová." end sub
Vysvětlení zdrojového kódu:
- Příkazem
sub
makro začíná (je zkratkou slova subroutine – podprocedura). - Příkaz
rem
znamená poznámku – komentář. Jde o informaci pro programátora, kterou program ignoruje – přeskočí (rem
je zkratkou z remark – poznámka). - Příkaz
print
způsobí otevření jednoduchého dialogového okna, které zobrazí text v uvozovkách.
Příklad 2: Je složen ze dvou maker, makra č. 2 a 3, kde makro č. 2 za jisté podmínky spustí makro č. 3:
Sub UpozorneniSeZavrenim ' makro č. 2 Rem Vypíše upozornění, že na databázi se ještě pracuje, Rem a popř. zavře databázi Rem deklarace proměnných Dim Zprava As String ' řetězec Dim VzhledOkna As Integer ' celé číslo Dim NadpisOkna As String ' řetězec Dim NavratovaHodnota As Integer ' celé číslo Zprava = "Dobrý den. Tato databáze není ještě hotová, " Zprava = Zprava + "takže vše ještě nefunguje, jak by mělo." Zprava = Zprava + " Chcete pokračovat v práci?" REM Vzhled je dán součtem čísel 48 + 4 = 52 REM č. 48 znamená ikonu Vykřičník, č. 4 zajistí tlačítka Ano, Ne VzhledOkna = 52 NadpisOkna = "Úvodní informace" Rem Návratová hodnota funkce MsgBox je při volbě Ano č. 6, při Ne č. 7 Rem Příkaz MsgBox zobrazí okno, ale také vrátí návratovou hodnotu Rem (buď 6 nebo 7) do proměnné NavratovaHodnota NavratovaHodnota = MsgBox(Zprava, VzhledOkna, NadpisOkna) Rem Samotný příkaz okna by mohl vypadat: MsgBox Zprava, VzhledOkna, NadpisOkna Rem Příkaz If – Then – End If pro větvení programu. If NavratovaHodnota = "7" Then Print "Nashledanou" ZavritDatabazi End If end sub Sub ZavritDatabazi ' makro č. 3 Dim dokument dokument = ThisComponent If HasUnoInterfaces(dokument, "com.sun.star.util.XCloseable") Then dokument.close(true) Else dokument.dispose() End If End Sub
Ke zdrojovému kódu jen pár dalších poznámek:
- Jde o dvě makra, z makra č. 2 (
UpozorneniSeZavrenim
) bude za jistých podmínek vyvoláno makro č. 3 (ZavritDatabazi
). - Komentář se dá zapsat kromě slova rem také pomocí znaku apostrof (').
- Tato makra jsou psána v programovacím jazyce Basic, kde u příkazů na velikosti písmen nezáleží (třeba příkaz
deklarace proměnné můžete psát jako
dim
,Dim
iDIM
). Ovšem u příkazů, které využívají API (Application Programming Interface čili aplikační programové rozhraní – standardizované rozhraní pro umožnění komunikace jiných programů zde s programy balíku OpenOffice.org) se doporučuje dodržovat velikost písmen podle popisu API (viz např. api.openoffice.org). Příkazy API jsou třebaThisComponent
,HasUnoInterfaces
z makra č. 3ZavritDatabazi
.
API - Application Programming Interface. Úlohu API pro programátora bych snad mohl přirovnat třeba ke klávesnici a myši pro běžného uživatele počítače. Během let se výrobci dohodli na jistém standardu (u klávesnice rozložení běžných kláves, numerická klávesnice, funkční klávesy, u myši dvě tlačítka a jejich běžné funkce, rolovací kolečko) a běžný uživatel má jistotu, že libovolný osobní počítač tímto příslušenstvím dokáže ovládat. API kancelářského balíku OpenOffice.org nabízí zase programátorovi jasné metody a služby, kterými mohou jeho programy s balíkem spolupracovat. Metody a služby API už nejsou součástí programovacího jazyka Basic, ale pomocí příkazů Basicu k nim můžeme přistupovat.
- Je možné příkazem
Dim
deklarovat proměnné (oznámit programu předem, jaké proměnné a jakých datových typů budou používány). Deklarace není většinou nutná, někdy však ano (v makru č. 3 u proměnnédokument
, která zastupuje celou databázi v Base). - Chod programu můžete rozvětvit na dvě cesty příkazem IF – THEN – END IF. Pokud bude splněna podmínka za slovem IF, provedou se příkazy před slovem THEN. Jestliže podmínka splněna není, provedou se příkazy mezi slovy THEN a END IF. Jednodušší variantou je příkaz IF – END IF, kde druhá větev se slovem THEN prostě chybí. O tomto příkazu se můžete dočíst např. na stránce o mladším sourozenci Basicu, kterým je Visual Basic.NET.
- Pokročilejší příkaz pro zobrazení dialogového okna je
MsgBox
(z Massage Box), ten má i parametry, nastavující nadpis okna a jeho vzhled (ikony, počet a druh tlačítek). - Příkaz
MsgBox
jako funkce (parametry budou uvedeny v závorkách) vrací hodnotu, podle které se může program dál řídit. - Z jednoho makra je možné volat makro jiné (příkaz
ZavritDatabazi
před koncem makraUpozorneniSeZavrenim
).
Úkol 19, verze „A“, Úkol 18, verze „B“ (spíše dobrovolný): Pročtěte si předchozí ukázky zdrojového kódu a promyslete, co by tato makra (malé prográmky) po svém spuštění vykonala. Odpověď najdete na konci tohoto dílu.
Úkol 20, verze „A“, Úkol 19, verze „B“: Podle následujícího textu zprovozněte buď první (jednodušší) nebo druhou verzi výše uvedených maker. Pokud už máte s makry zkušenosti, jistě tento úkol můžete přeskočit.
Jak vytvořit makro? Editor maker.
Pro vytvoření makra jsou dvě možnosti:
- Nahrání makra pomocí záznamníku maker. Tato možnost se hodí jen pro jednoduchá makra, nedokážeme s ní vytvořit třeba dialogová okna, proto ji zde nevyužijeme. Ukázka tohoto postupu je např. v úvodu elektronické knihy pana Pastierika.
- Zápis zdrojového kódu makra v editoru maker. Tento způsob se nám bude hodit.
Editor maker je součástí vývojového prostředí v OpenOffice.org, tzv. IDE (Integrated Development Environment), které kromě editoru pro zápis kódu nabízí také pomůcky pro ladění makra.
IDE s editorem otevřete volbou Nástroje | Makra | Správce maker | OpenOffice.org Basic... (protože naše makra budou psána v základním jazyku maker pro OpenOffice.org, v Basicu).
Tato volba otevře dialogové okno Makra v OpenOffice.org Basic, ve kterém je třeba vybrat modul, který bude makro obsahovat, popř. nový modul vytvořit. Na obrázku je ukázka tohoto okna, vysvětlující komentář následuje za poznámkou.
Obrázek č. 1: Dialogové okno Makra v
OpenOffice.org Basic
Kde jsou makra uložena?
Makro – Modul – Knihovna – Knihovní kontejner. Makro je program, který je uložen v jisté hierarchii souborů a složek. Je zapsáno v jednom souboru – tzv. modulu. V modulu bývá zapsáno maker víc – všechna makra, která se podílejí na řešení společného úkolu. Moduly se ukládají do knihoven a knihovny do knihovních kontejnerů.
V předchozím obrázku vidíte tři knihovní kontejnery: Moje makra, Makra OpenOffice.org a Base-dil-11-... První dva najdete v OpenOffice.org vždy: kontejner Moje makra je určen pro makra, vytvořená uživatelem, v kontejneru Makra OpenOffice.org jsou makra tvůrců tohoto kancelářského balíku. Třetí knihovní kontejner se vytvoří automaticky při založení nového dokumentu a má stejný název jako dokument.
Při psaní makra musíte tedy otevřít nějaký modul, do kterého se příkazy makra vepíší. V obrázku byl vybrán modul Module1 z knihovny Base v knihovním kontejneru Moje makra. Samotné makro má název UpozorneniSeZavrenim a jeho zdrojový kód byl uveden výše (druhé ze tří maker). Pokud byste chtěli hotové makro upravovat, tímto způsobem ho vyberete a pak kliknete na tlačítko Upravit v pravé části okna. Tím otevřete editor maker v OpenOffice.org, ve kterém se makra dají upravovat a tvořit.
Obrázek č. 2: Kód makra v okně vývojového
prostředí (IDE)
Ve spodní části okna IDE si všimněte záložky s názvem modulu (Module1). Pokud by knihovna maker měla více modulů, budou zde všechny jejich záložky a s jejich pomocí můžete mezi moduly procházet.
Napište první makro
Víte už, jaký by mohl být zdrojový kód prvního pokusu pro seznámení s makry i jak by se mohl jmenovat modul, knihovna i knihovní kontejner, kam makro můžete uložit. Jestliže chcete splnit Úkol 20, verze „A“ nebo Úkol 19, verze „B“ (zprovozněte buď první – jednodušší – nebo druhou verzi výše uvedených maker), můžete se řídit následujícími radami:
(1). Volbou Nástroje | Makra | Správce maker | OpenOffice.org Basic... otevřete dialogové okno Makra v OpenOffice.org Basic.
(2). Klikněte na tlačítko Organizátor maker, abyste mohli vytvořit novou knihovnu maker, třeba s názvem Base. Otevře se okno Organizátor maker OpenOffice.org Basic. Zde vyberte třetí záložku Knihovny a klikněte na tlačítko Nový... Do textového pole Název v dalším okně Nová knihovna pak zapište její jméno (Base). Vše ukazuje obrázek.
Obrázek č. 3: Vytváříme novou knihovnu
maker
(3). Po potvrzení názvu se nejmenší z oken zavře, pak zavřete i okno Organizátoru. Tím se vrátíte do okna Makra v OpenOffice.ogr Basic. Když otevřete (malým tlačítkem „plus“) novou knihovnu Base, zjistíte, že automaticky obsahuje jeden modul s názvem Module1 a v tomto modulu je zatím jediné makro s názvem Main. Klikněte na tento název makra a pak na tlačítko Upravit. Tím otevřete editor maker s modulem Module1.
(4). Zjistíte, že makro Main je zatím prázdné (obsahuje jen počáteční a koncový řádek Sub Main
a
End Sub
. Pod toto makro nyní buď sami přepište kód výše uvedených maker (prvního, pokud jste si vybrali
snazší verzi, nebo druhého a třetího u verze obtížnější), nebo snáze prostě vybraný zdrojový kód zkopírujte a do
editoru vložte. Tyto změny v modulu uložte (nejrychleji volbou [Ctrl+S]).
(5). Editor maker (IDE) můžete zavřít.
Spuštění makra. Událost, spouštějící makro
Makro máte připravené, ale je ještě nutné umět ho spustit. I zde jsou dvě možnosti:
- Makro spustí přímo uživatel, a to volbou Nástroje | Makra | Spustit makro...
- Makro spustí Base (nebo jiný program kancelářského balíku) při výskytu nějaké události.
První možnost otevře dialogové okno s názvem Výběr makra, které nabízí dostupné knihovní kontejnery. V nich uživatel vyhledá vhodnou knihovnu a z ní vybere modul s makrem. V okně se zobrazí názvy maker v modulu, uživatel požadované vybere a spustí kliknutím na tlačítko Spustit. Okno je na obrázku č. 5 o něco níže. Tato možnost je ale dost těžkopádná a pro první zkušební makro, které se má samo spustit během načítání databáze, se nehodí. Doporučuji ale i tento způsob spuštění u pokusného makra vyzkoušet.
Druhá možnost je pro makra většinou výhodnější (rychlejší). Událostí, která makro spustí, může být např.:
- Otevření dokumentu (to se týká zkušebního makra z této první části dílu),
- Aktualizace záznamu databáze (tato událost se bude hodit pro makro ve formuláři v druhé části dílu),
- Kliknutí na tlačítko ve formuláři apod.
Pro makra v tomto dílu použijete právě tuto druhou možnost, kdy makro spustí zvolená událost.
Spuštění zkušebního makra
Nastavení události pro spuštění makra vyzkoušejte nejdřív na zkušebním makru, které jste si před chvílí připravili. Postup je tento:
(1). V databázi Knihovna v Base zvolte volbu horního menu Nástroje | Přizpůsobit. Otevře se okno Přizpůsobit, které umožňuje nastavit ve čtyřech záložkách postupně položky Nabídek (menu) programu, klávesové zkratky, položky Panelů nástrojů (pro dotazy, formuláře apod.) a nakonec právě přiřazení akcí vybraným událostem. V dolní části okna si všimněte rozevíracího seznamu, ve kterém je zvolen dokument databáze Knihovna. Druhou volbou by byl OpenOffice.org, pak bychom vybrali událost týkající se celého kancelářského balíku.
Obrázek č. 4: Okno Přizpůsobit se záložkou
Události
(2). V okně vyberte událost Otevřít dokument a potom klikněte na tlačítko Makro.
(3). V dalším okně Výběr makra vyberte pokusné makro, jehož zdrojový kód jste napsali nebo vložili do modulu v editoru maker. Toto okno bylo popsáno i o několik odstavců výše.
Obrázek č. 5: Vyberte makro, kterému chcete
přiřadit události
(4). V záložce Události okna Přizpůsobit se vybrané makro zobrazí i s názvem modulu a knihovny, např. takto:
Base.Module1.UpozorneniSeZavrenim
. Potvrďte přiřazení makra klávesou OK.
Mohli jste zvolit i jiný postup, který by vycházel z dříve uvedeného okna Makra v OpenOffice.org Basic, které otevřete výše uvedenou cestou Nástroje | Makra | Správce maker | OpenOffice.org Basic... (popř. se vraťte k obrázku č. 1). Zde stačí kliknout na tlačítko Přiřadit.
A to je vše. Zavřete okno databáze Knihovna a po jeho znovuotevření by se mělo makro projevit jedním nebo dvěma dialogovými okny, jak je to popsáno v odpovědi na otázku ze začátku tohoto dílu (odpověď je umístěna před koncem článku).
Druhá část: Makro pro formulář s rozevíracím seznamem
Opakování, účel makra
V předchozím dílu se nám podařilo ve formuláři vytvořit funkční jednoduchou roletku jako součást tabulky formuláře, např. pro výběr třídy při zápisu nového studenta jako čtenáře. Problémy nastaly, když rozevírací seznam měl být na formuláři jako samostatná komponenta:
- Prvním problémem bylo zjištění, že vytvoření takové roletky v režimu průvodce formulářem není spolehlivé, roletka pak nemusí fungovat. Tento první problém jsme vyřešili tak, že jsme formulář se samostatným rozevíracím seznamem vytvořili v režimu návrhu (nikoli průvodcem).
- Druhý problém spočíval v tom, že i takto vytvořená roletka nefungovala správně, protože po výběru nějaké hodnoty roletkou se neaktualizoval navigační panel (stále ukazoval číslo první položky), Base tedy nepřešel na jiný záznam, ale domníval se, že chceme měnit hodnotu položky v prvním záznamu. Tím nastávaly i problémy s integritou databáze (vypadalo to, jako byste chtěli duplikovat hodnoty primárního klíče apod.).
V druhé části tohoto dílu chceme vyřešit právě tento druhý problém. Uvedu potřebné makro a po úvodu v první části bude pro vás snadné je zprovoznit.
Úkol 21, verze „A“, Úkol 20, verze „B“: Podle následujícího textu opravte chybu ve fungování formuláře s kombinovaným polem jako samostatným ovládacím prvkem.
Popis makra
Makro zajistí po výběru jiné položky z kombinovaného pole aktualizaci formuláře – přechod na tuto položku. Jeho zdrojový kód by mohl být následující:
sub Aktualizace( oEventObject as object ) rem parametr makra oEventObject zastupuje objekt, volající makro, ' čili zde kombinované pole rem deklarace proměnných dim oDataForm ' proměnná, zastupující objekt formuláře dim strSelectText ' proměnná, zastupující vybraný text z komb. pole dim oComboSelect ' proměnná, zastupující rozevírací seznam - kombinované pole dim nCount, nCounter as Integer ' nCound: počet položek seznamu, nCounter: pomocná proměnná cyklu oDataForm = oEventObject.Source.Model.Parent ' rodičem komb. pole je formulář oComboSelect = oEventObject.Source ' zdrojem činnosti je komb. pole strSelectText = oComboSelect.SelectedText ' funguje i oComboSelect.Text ' jen pomocný výpis vybrané položky, později tento výpis odstraňte MsgBox "Byla vybrána položka " + oComboSelect.SelectedText nCount = oComboSelect.getItemCount() ' počet položek seznamu ' jen pomocný výpis vybrané položky, později tento výpis odstraňte MsgBox "Počet položek je " + nCount nCounter = 0 ' počáteční hodnota pomocné proměnné cyklu ' následující cyklus prochází položky kombinovaného pole, ' dokud nenajde uživatelem vybranou Do While ( nCount > nCounter) If strSelectText = oComboSelect.Items( nCounter ) then ' v cyklu se došlo k vybrané položce a provedou se dva následující příkazy oDataForm.absolute(nCounter + 1) ' přejde na položku číslo nCounter + 1 Exit Do ' předčasně se ukončí cyklus End If ' v cyklu se ještě nedošlo k vybrané položce a provede se jediný příkaz nCounter = nCounter + 1 Loop ' konec cyklu, znovu na podmínku Do While end sub
Makro bylo převzato především z několika fór na toto téma a mírně upraveno. O metodách a příkazech můžete najít informace na stránkách o API (aplikačním programovém rozhraní) OpenOffice.org. Např. metoda absolute() je popsána na stránce rozhraní XResutlSet.
Zápis makra do modulu v editoru maker
Postup znáte z první části dílu. Připomínám jen, že k IDE s editorem maker se můžete dostat volbou Nástroje | Makra | Správce maker | OpenOffice.org Basic... V dialogovém okně Makra v OpenOffice.org Basic (viz obrázek č. 1) vyberete modul, který bude makro obsahovat (nebo můžete vytvořit nový). Pokud jste v první části založili knihovnu Base v knihovním kontejneru Moje Makra, můžete vybrat jeho modul s názvem Module1, do kterého jste už vepsali zkušební makro. Pak kliknete na tlačítko Upravit v pravé části okna. Tím otevřete editor maker (obrázek č. 2), kam můžete zdrojový kód makra opět vložit po zkopírování kódu uvedeného o pár odstavců výše. Změny v modulu uložte([Ctrl+s]), ale okno IDE ještě nechejte otevřené.
Sjednocení názvů komponent ve formuláři a v makru. Některá makra se odkazují na komponenty jejich skutečnými
názvy (pro formulář používá Base přednastavený název MainForm
, po vložení kombinovaného pole se této
komponentě pravděpodobně nastaví název Kombinované pole
, pokud ho v okně Vlastnosti nenastavíte jinak).
Zde uvedené makro však podobné skutečné názvy nepoužívá, obchází to obecnými příkazy jako
oEventObject.Source.Model.Parent
a oEventObject.Source
, kterými se odkaz na formulář a
komponentu přiřadí pomocným proměnným (oDataForm
, oComboSelect
). O sjednocení názvů ve
formuláři a v textu makra se tedy zde nemusíte starat.
Přiřazení makra události
I tuto činnost už znáte z první části dílu. Byly uvedeny dvě možnosti postupu, u tohoto makra musí být ale cesta k přiřazení makra ještě jiná. Proč? Pro naši potřebu bychom totiž mohli makra rozdělit na dva druhy takto:
- Makra, týkající se celého dokumentu. To bylo např. pokusné makro z první části tohoto dílu, které mělo za úkol otevřít dialogové okno s hlášením při otevírání databáze Knihovna. Proto jste vybírali z událostí, spojených s celým dokumentem.
- Makra, která se týkají jen jediného prvku, např. na formuláři. To je případ, kterým se zabýváme nyní, makro se má spustit při volbě jiné položky ovládacím prvkem Kombinované pole. Zde budeme makro přiřazovat události, týkající se jen tohoto ovládacího prvku. Asi byste přišli sami na to, že seznam těchto událostí najdete v jedné ze záložek okna Vlastnosti daného ovládacího prvku.
Tentokrát tedy nepoužijete volbu horního menu Nástroje | Přizpůsobit. Místo toho otevřete formulář v režimu návrhu (pravá klávesa myši, volba Upravit). Poté otevřete okno vlastností kombinovaného pole (např. dvojklikem na tento prvek). V okně přejděte do záložky Události. Tentokrát použijte událost Změna stavu položky, takže klikněte na tlačítko se třemi tečkami vpravo od této události. V okně Přiřadit akci použijte tlačítko Makro... Nakonec z dalšího dialogového okna Výběr makra (obrázek č. 5 výše) vyberte nové makro (v tomto článku má název Aktualizace). Přiřazení makra potvrďte klávesou OK.
Nyní zbývá jen činnost makra vyzkoušet. Ikonou Režim návrhu zap/vyp přejděte do normálního pracovního režimu formuláře. Když vyberete roletkou jiný obor, objeví se dvě hlášení (jaký obor byl vybrán a kolik je celkově oborů). Nakonec se formulář zaktualizuje podle vybraného oboru, což poznáte podle změny čísla na navigačním panelu v dolní části formuláře.
Úkol 22, verze „A“, Úkol 21, verze „B“: Upravte kód makra, použitého ve formuláři, aby nezobrazovalo informační okna s hlášením o vybrané položce a o počtu položek v seznamu.
Odpověď na otázku ze začátku tohoto dílu
Šlo o Úkol 19, verze „A“, Úkol 18, verze „B“ (Pročtěte si předchozí ukázky zdrojového kódu a promyslete, co by tato makra (malé prográmky) po svém spuštění vykonala.). Činnost maker je tato:
- První makro jen otevře jednoduché dialogové okno, které zobrazí text „Dobrý den. Tato databáze není ještě hotová.“
- Druhé makro po deklaraci proměnných postupně připraví textovou proměnnou s názvem Zprava, obsahující text „Dobrý den. Tato databáze není ještě hotová, takže vše ještě nefunguje, jak by mělo. Chcete pokračovat v práci?“ Potom se nastaví vzhled okna a jeho popisek („Úvodní informace“). Funkcí MsgBox(...) se zobrazí dialogové okno, které ale do programu vrátí hodnotu (číslo 6 nebo 7) podle toho, jestli uživatel klikne na tlačítko „Ano“ nebo „Ne“. Pokud bude návratová hodnota číslo 7, provedou se příkazy podmíněného příkazu If: zobrazí se dialog s textem „Nashledanou“ a vyvolá se třetí makro.
- Třetí makro je krátké, ale ne jednoduché. Jeho úkolem je správně – regulérně – zavřít databázi. Po deklaraci se
proměnné
dokument
přiřadí odkaz na samotnou databázi, ve které makro běží (příkazemThisComponent
) a v podmíněném příkazu se zjišťuje, jestli se databáze Base hlásí k rozhraníXCloseable
(jestli toto rozhraní implementuje). Pokud ano, bude program ukončen metodouclose(true)
, pokud ne, bude ukončen příkazemdispose
. Zde už se tedy používá dohodnutých příkazů aplikačního programového rozhraní (API) balíku OpenOffice.org.
Otázky na závěr – Shrnutí jedenáctého dílu
Seznámení s makry v Base, použití makra ve formuláři s roletkou
- Vysvětlete stručně, co je makro a k čemu se dá v programech kancelářského balíku použít.
- Makra se OpenOffice.org často píší v programovacím jazyku Basic. Napište podle ukázek zdrojového kódu, k čemu slouží v tomto jazyku příkazy SUB, REM, DIM, PRINT, MsgBox, IF – THEN – END IF.
- Uveďte aspoň jednu možnost, jakou je možné spustit běh makra.
- Zkuste stručně vysvětlit zkratky IDE (Integrated Development Environment) a API (Application Programming Interface).
Co vás čeká v dalším dílu?
Ve dvanáctém dílu seriálu o databázovém programu Base dodám, jak v opraveném formuláři s roletkou zadat nový obor a formulář dokončíme přidáním dalšího prvku. Bylo by také užitečné upravit makro, aby fungovalo nejen pro kombinované pole, ale také u ovládacího prvku seznam.
Později už snad nebude příliš obtížné připravit formulář pro zadávání dat do tabulek s vazbou M – M (už jste se seznámili s makry) a seriál se bude chýlit ke konci články o dotazech a sestavách.