Zpočátku vypadá tvorba a hlavně ovládání dialogových oken složitě. Jak se vám ale jednou povede okno zprovoznit, uvidíte, že to není tak těžké.
Jak vytvořit dialogové okno
V prvním kroku si musíte okno vytvořit. To uděláte v editoru Basicu. V menu Nástroje | Makra | Správce dialogů otevřete dialog, kde si vyberete knihovnu Standard (ve vlastních makrech, nebo v dokumentových makrech) a zvolíte Nový. Dialog si pojmenujte (jméno budete potřebovat při jeho volání). Pro pojmenovávání dialogů platí stejná pravidla jako pro pojmenovávání maker.
Na zkušební účely si klidně ponechte přednastavený Dialog1, potvrďte a zvolte Upravit. Nyní se otevře Editor Basicu. Ten funguje obdobně jako sešit v Calcu. Platí, že každý dialog a modul má svoji vlastní záložku. Po otevření vidíte přednastavenou šablonu dialogu:
Na základě této šablony si vytvoříte vlastní grafický návrh. Nejprve je ale nutná analýza toho, co vlastně budete chtít. Musíte tedy vědět, jaké makro chcete, co má udělat a jakým způsobem ho budete ovlivňovat.
Zkuste si napsat program zadávání dat do telefonního seznamu.
Analýza
- vytvořit strukturu v Calcu
- jméno a příjmení
- telefonní číslo mobilu
- telefonní číslo pevné linky
- adresa (pokud je známa)
- Návrh dialogového okna
- jméno a příjmení – textové okno
- telefonní číslo mobilu – textové okno (může být i číselné, pokud ale chcete zapsat telefon s mezerami (123 456 789), je nutno naformátovat buňku jako text.
- telefonní číslo pevné linky – viz výše
- adresa – textové okno
- tlačítka OK a ZRUŠIT
- Napsání makra a přiřazení proměnných k jednotlivým položkám okna.
V Calcu si připravíte tabulku podle navržené struktury.
Vlastnosti okna a polí
Předpokládám, že jste na začátku listu, tedy v A1. První volná buňka je tedy A2, kam bude proveden první zápis, následují buňky B2–D2. Strukturu máte a nyní vlastní dialogové okno. Do předpřipravené šablony si budete vkládat jednotlivá pole. Ta jsou zobrazena na horní liště. Zvolte si textové pole a myší si jej vložte do dialogu. Vzhledem a rozměry se teď netrapte, takováto kosmetika patří na závěr. Vložte tedy čtyři textová pole. Dále přidejte dvě tlačítka. Pokud máte dialog vytvořen, vypadá přibližně takto:
Nyní si upravíte vlastnosti polí. Nejdůležitější je jejich pojmenování, protože přes ně si k nim zjednáváte přístup. Vlastnosti upravujete následovně: Po kliknutí na pole se „obalí“ čárou a zelenými čtverečky (stejně jako vložené obrázky v Draw a Writeru); stiskněte pravé tlačítko myši a vyberte Vlastnosti. Otevřelo se další okno, kde již můžete ovlivňovat pole jako takové. Jak jsem psal výše, důležité je jméno. Přednastaveno máte „Textfield1“, nebojte se ho přejmenovat. Osobně používám stejné jméno, jako má proměnná, se kterou budu pole spojovat, pouze přidám d (jako dialog). Tedy první pole pro jméno si pojmenujte d_jmeno. Dále máte možnost zadat maximální počet znaků, které mohou být zadány, pozadí, typ písma apod. Pozor, pokud si změníte vlastnosti, měníte pouze vlastnosti pole, neznamená to, že po proběhnutí makra se tyto vlastnosti přenesou i do buňky. Zkrátka, kvůli příkladu stačí pojmenovat čtyři pole – d_jmeno, d_mobil, d_pevna a d_adresa.
Zbývají ještě tlačítka. Otevřete si jejich vlastnosti a do názvu zadejte OK (nebo ZRUŠIT) a do popisku také OK (nebo Souhlasí…). Popisek určuje, jaký text bude na tlačítku zobrazen. U tlačítek musíte zvolit ještě jednu důležitou vlastnost: jakou funkci má plnit. Tu najdete pod Typem tlačítka. Pro OK tedy zvolíte OK a na Zrušit překvapivě Zrušit. Dialog nyní vypadá takto:
Dialogové okno s pojmenovanými tlačítky
Pro přehled, jaké pole vlastně máte, si ještě upravíte popisky, které se objeví nad jednotlivými poli. Popisky najdete rovněž na liště, hned vedle textových polí (ABC). Umístěte je nad definovaná pole a zvolte Vlastnosti – hned na druhém řádku si zvolte text, jaký chcete mít zobrazený. Dialog po finální úpravě vypadá takto:
Makro pro dialogové okno
Kód pro makro:
Sub seznam dim dlg as object dim jmeno as object, mobil as object, pevna as object, adresa as object dim i as integer doc = thisComponent list = doc.sheets(0) i = Inputbox ("Vložte číslo řádku pro zápis", "Telefonní seznam") jmeno = list.getCellByPosition(0,i) mobil = list.getCellByPosition(1,i) pevna = list.getCellByPosition(2,i) adresa = list.getCellByPosition(3,i) DialogLibraries.LoadLibrary("Standard") dlg=createUnoDialog(DialogLibraries.Standard.Dialog1) if dlg.execute() = 1 then jmeno.string = dlg.model.d_jmeno.text mobil.string = dlg.model.d_mobil.text pevna.string = dlg.model.d_pevna.text adresa.string = dlg.model.d_adresa.text else dlg.dispose() endif end sub
Nyní si rozebereme jednotlivé příkazy:
(1). Deklarovali jste proměnné jako objekty, protože se jedná o buňky – proměnné jmeno, mobil, pevna a adresa.
(2). Dále jste zavedli i jako číslo (i as integer) – zde jste vyzváni k zadání čísla řádku, na kterém bude následně prováděn zápis. To lze lépe vyřešit pomocí pomocné buňky, kam si zadefinujete číslo prvního zápisu a na konci makra ho zvýšíte o 1. Tím si při příštím spuštění zajistíte aktuální číslo řádku bez nutnosti ho zadávat.
(3). Pak jste identifikovali doc jako tento konkrétní dokument (doc=thisComponent), list ( sheets(0)) jako list číslo 1 (lze i sheets.getByName ("List1")). Pozor, v Basicu začíná číslování vždy 0 (0=1).
(4). Když máte buňky jako objekty, musíte také určit, o jaké konkrétní buňky se jedná. To jste učinili zápisem:
jmeno = list.getCellByPosition (0, i) čísla v závorce znamenají číslo sloupce a číslo řádku. Namísto čísla řádku máte proměnnou „i“, kam pomocí inputboxu zadáváte číslo přímo.
DialogLibraries.LoadLibrary ("Standard") tento příkaz zpřístupní všechny dialogy uložené v knihovně Standard.
dlg = createUnoDialog(DialogLibraries.Standard.Dialog1) – zde jste zpřístupnili konkrétní dialog (dialog1), který jste zároveň přiřadili do proměnné dlg.
Bez těchto dvou příkazů se u dialogových oken neobejdete.
Pokud makro dojde až sem, otevře se nastavené dialogové okno tak, jak bylo výše ukázáno na obrázku. Nyní provedete zápis do jednotlivých polí a potvrdíte. Platí, že potvrzení OK vrací hodnotu 1, Zrušit vrací 0.
Textová pole
Jestliže víte to, co je psáno výše, je jasný další krok:
if dlg.execute() = 1 then – tj. když jste potvrdili OK, provede makro následující přiřazení polí do buněk (objektů):
jmeno.string = dlg.model.d_jmeno.text mobil.string = dlg.model.d_mobil.text pevna.string = dlg.model.d_pevna.text adresa.string = dlg.model.d_adresa.text
Jednotlivé objekty (buňky) jste pomocí .string definovali jako textové. Rovnítko je jasné a dlg model.d_jmeno.text vrátí hodnotu z pole pojmenovaného jako d_jmeno . Program zapsal všechna pole do buněk a skončil.
Pokud zvolíte Zrušit, následuje příkaz dlg.dispose() (uvolnění dialogu) a konec makra.
Příště si povíme o dalších druzích polí, která můžete v dialogu použít. Např. seznam hodnot, číselná pole, datum a čas, měna, zaškrtávací pole apod.