Jak spojit makro s vlastnostmi dialogů

programovani.png Podrobně si ukážeme, jak spojit makro s událostí dialogu. Tento způsob použijete i tehdy, kdy dialogy nebudete využívat, ale budete je chtít nahradit formulářovými prvky přímo v dokumentu (jako jsou tlačítka, číselné vstupy…), jejich ovládání je totiž velmi podobné.  

Jako první si musíte označit pole, které chcete ovlivnit. Označení se projeví zobrazením zelených čtverců po obvodu pole. Samozřejmě, pokud označíte celé okno (kliknutím na okraj), můžete ho měnit stejně jako pole. Pravým tlačítkem myši vyberete Vlastnosti (u formulářových prvků je to Ovládací prvek). Po otevření nového dialogu máte možnost přímo ovlivňovat vlastnosti prvku. Zde vidíte první záložku.

Záložka obecné

První záložka ve vlastnostech pole – Obecné První záložka ve vlastnostech pole – Obecné

Důležitou položkou je název – tento název budete volat makrem, proto je důležité ho odlišit od ostatních polí. Další poměrně důležitou položkou je pořadí aktivace – určuje, v jakém pořadí bude možné přesouvat se mezi poli pomocí tabulátoru. Barvu, písmo, rozměry a mnoho dalších můžete určit právě zde.

TIP: Přestože je použití barev velice lákavé, musím zde podotknout, že všechny mé pokusy následně končí u přednastavených barev. Uvědomte si, že po prvním nadšení můžou být nakonec spíše rušivé.

Na této záložce také nastavujete funkce tlačítek, která jste přidali do vašeho dialogu. Jedná se o tlačítka OK a Zrušit. Pod názvem Typ tlačítka se skrývají důležité možnosti, bez kterých se váš dialog neobejde a které je nutné zadat.

Pokud vyvoláte příkazem v makru dialog, musíte také makru určit, kdy má dialog ukončit. Proto musíte nastavit tlačítko (OK, Hotovo…) a přiřadit mu typ OK. Po stisknutí tohoto tlačít ka dialog „zmizí“ a předá makru hodnoty, které jste do něj vložili (princip je stejný jako u MsgBox – návratová hodnota tlačítka OK je 1).

Pro toto tlačítko je v programu příkaz:

if dlg.execute = 1 then

Takto je možné definovat i tlačítko Zrušit a Nápověda. Vždy se jedná o přednastavené volby – žádným způsobem je již programově neupravujete. Tlačítko Zrušit se chová stejně jako po kliknutí na křížek pro uzavření dialogu. Pokud jste hotovi s „formátováním“ pole, přejděte na druhou záložku:

Záložka události

Druhá záložka ve vlastnostech pole – Události Druhá záložka ve vlastnostech pole – Události

Zde již přiřazujete jednotlivá makra k událostem pole. Na výběr máte mnoho možností, probereme ale jen některé z nich – nejčastěji používané. Dejte si pozor, jaký druh činnosti a k jakým událostem budete přiřazovat. Pokud budete ovládat makrem pole (například zapisovat do něj hodnoty) a makro přiřadíte k Text změněn, spustíte nekonečnou smyčku.

Text změněn, změněno

Makro se spustí pokaždé, pokud změníte text v poli. Využijete pro pole s obsahem (textová, číselná, formátovaná…).

Při zaměření a při ztrátě zaměření

Zaměřením je myšlen čas, kdy se okno stane aktivním – přeskočením do pole pomocí tabulátoru nebo po kliknutí myši do pole. Ztráta zaměření je opak – opuštění pole. Využijete pro zaškrtávací tlačítka a pro tlačítka volby – lze využít i pro pole s obsahem.

Stisknuto tlačítko myši, puštěno tlačítko myši

Netřeba vysvětlovat. Využijete u tlačítek.

Záložka události poskytuje ještě mnoho dalších využití. Ta, která jsme si teď vyjmenovali, jsou nejpraktičtější z nich.

Na obrázcích vidíte záložku před a po přiřazení makra.

Před přiřazením makra Před přiřazením makra

A po jeho přiřazení A po jeho přiřazení

Vícestránkové dialogy

Dialog je rozložen do několika přepínacích oken (například po kliknutí na šipku se zobrazí další pole k vyplnění). Tuto možnost využijete při programování rozsáhlejších maker, ale samozřejmě to není podmínkou. Klidně můžete mít vícestránkový dialog s jedním polem na každé straně. Uvědomte si ale, zda je nutné takový dialog dělat. Vždy, když vytváříte makro nebo dialog, myslete na ty, kdo s ním budou pracovat. Přehlednost, jednoduchost, nenáročnost a rychlost rozhodují o tom, zda ho budou uživatelé používat. Pokud se tedy rozhodnete vytvořit vícestránkový dialog, rozvrhněte si dopředu jeho podobu. Nezapomeňte přitom, že budete potřebovat přepínací tlačítko, kterým se budete mezi jednotlivými stránkami pohybovat. Zkuste jednoduchý dvoustránkový dialog. Na první straně budou dvě vstupní pole, na druhé jedno a tlačítko OK. Pro tentokrát si nebudete spojovat dialog s dokumentem, protože to již umíte a na makro nemá žádný vliv to, zda je pole na první nebo jiné stránce dialogu (jen pozor na názvy polí, nesmí se opakovat).

U vícestránkových dialogů musíte dodržet následující pravidla:

  1. Zkontrolujte, zda máte na prázdné šabloně ve vlastnostech dialogu uvedeno Stránka (krok) 0.
  2. Vložte ta pole nebo tlačítka, která budou zobrazena na všech stránkách dialogu (zcela jistě to bude tlačítko na přepínání), a nastavte u nich Stránka (krok) 0.
  3. Označte celý dialog a změňte Stránka (krok) na 1.
  4. Vložte pole pro první stránku dialogu. Opět kontrolujte, zda je ve vlastnostech Stránka (krok) 1.
  5. Označte celý dialog a změňte Stránka (krok) na 2.
  6. Vložte pole pro druhou stránku, pokud je poslední. Nezapomeňte na tlačítko OK, případně i Zrušit. Opět kontrolujte, zda Stránka (krok) tlačítka souhlasí s dialogem Stránka (krok).
  7. Pokud máte dialog hotový, označte jej a vraťte se v dialogu Stránka (krok) zpět na hodnotu 1. Jinak se vám bude zobrazovat poslední editovaná stránka dialogu jako výchozí.
  8. Platí, že tam, kde jste nastavili Stránka (krok) 0, budou tato pole nebo tlačítka zobrazena na všech stránkách bez ohledu na jejich pořadí. Ostatní se řídí číslem stránky.

Nyní si ukážeme, jakým způsobem se budete pohybovat mezi jednotlivými stránkami dialogu. Lze to vyřešit velmi jednoduchým makrem na přechod. Toto makro umí změnit i popisek přepínacího tlačítka (další/předchozí). Makro má přepínací tlačítko, které jste nazvali strana.

sub prechod_vpred
 if dlg.model.step = 1 then
 dlg.model.step = 2
 dlg.model.strana.enabled = True
 dlg.model.strana.label = "ZPĚT"
 else
 dlg.model.step = 1
 dlg.model.strana.enabled = True
 dlg.model.strana.label = "DALŠÍ"
 endif
 end sub

Toto makro si přiřadíte k událostem přepínacího tlačítka, konkrétně k „stisknuto tlačítko myši“.

Dlg.model.step = 1 tento příkaz řídí stránky dialogu. Makro tedy zjistí pomocí If, na které stránce se nacházíte, a přepne na další stránku (dlg.model.step = 2).

Tímto příkazem povolíte (dlg.model.strana.enabled = True) přístup k tlačítku strana a pomocí dlg.model.strana.label řídíte text, který je zobrazen na tlačítku pojmenovaném strana (naše přepínací tlačítko). Zkuste si upravit dialog pro výpočet spotřeby z minulého dílu, kdy výsledek (spotřebu) přesunete na druhou stranu dialogu a přidáte přepínací tlačítko s makrem.

Přiřazení všech ostatních polí k proměnným nebo vlastním makrům zůstává stejné jako u jednostránkových dialogů. Není nutné je jakkoliv upravovat.

Souhrn dialogů

Dialogy jako takové vypadají velmi složitě, jakmile si ale naprogramujete první, všechny ostatní už půjdou lehce. Dialogy jsou velmi silnou pomůckou tam, kde potřebujete více vstupních informací pro makro a nechcete je řešit jiným způsobem, jako je například inputbox. Samozřejmě nemusíte používat pouze pole na předávání proměnných, ale použijete i zaškrtávací tlačítka nebo tlačítka volby na přímé řízení běhu maker. Jeden vhodně vytvořený dialog nahradí inputboxy i msgboxy, o kterých jsme si povídali výše. Inputbox a Msgbox použijete tam, kde potřebujete změnu například v průběhu programu, kdežto dialog je vhodný spíše na začátku makra, není to ale podmínkou. Výhodou dialogů oproti ostatním vstupním funkcím je to (kromě neomezeného počtu vstupů), že si jeho vzhled můžete upravit, ať již jde o barvu, písmo, centrování, či spoustu dalších vlastností. Inputbox a Msgbox totiž přebírají systémové výchozí nastavení a není možné je upravit.

TIP: Velmi pěkný popis dialogů naleznete i v knize p. Pastierika – , kterou vám pro studii veškerých maker vřele doporučuji.

Věřím, že se vám dialogy stanou silnou pomůckou ve vašem programování a že je přes počáteční případné neúspěchy nezavrhnete. Byla by to škoda.

(Jako ve škole) Průměr: 1.18 | Hodnotilo: 11
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Daniel Sedláček

Daniel Sedláček

Amatérsky se věnuji programování maker od podzimu 2010.
Aktivní jsem na fóru od ledna 2011.
Od července 2011 spolupracuji i jako moderátor fóra.

Využívám pouze OpenOffice.org (LibreOffice nemám nainstalován).

 
 
 
woo jaw demo hz