Dialogová okna (1.) – vytvoření okna a textová pole

programovani.png Nejste spokojeni s přednastavenými možnostmi vstupů, které program nabízí? Řešením jsou vlastní vstupy, kde si můžete sami zvolit vlastnosti, pole, vzhled a funkci.  

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:

Šablona dialogu čistá Šablona dialogu čistá

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

  1. vytvořit strukturu v Calcu
    1. jméno a příjmení
    2. telefonní číslo mobilu
    3. telefonní číslo pevné linky
    4. adresa (pokud je známa)
  2. Návrh dialogového okna
    1. jméno a příjmení – textové okno
    2. 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.
    3. telefonní číslo pevné linky – viz výše
    4. adresa – textové okno
    5. tlačítka OK a ZRUŠIT
  3. 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.

Tabulka

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:

Vytvoření polí v dialogu Vytvoření polí v dialogu

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 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:

Pojmenování polí v dialogu Pojmenování polí v dialogu

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.

(Jako ve škole) Průměr: 1.05 | Hodnotilo: 20
 

Komentáře

user avatar Guest
Odpovědět
Dialogová okna (1.) – vytvoření okna a textová pole
16. 04. 2012, 14:10:47
Som rad za tento serial, prave zacinam riesit dialogy a zadavanie hodnot v Calcu. Stale mam, ale problem so zamknutin harku. Potrebujem zamknut harok, tak aby sa do nho nedali priamo zapisovat hodnoty, ale len cez pripraveny dialog. Ked zamknem cely harok, tak ani cez dialog sa nedaju upravovat hodnoty.

btw: InputBox je mozne obist a zobrat priamo hodnotu vybraneho riadka napr. takto
i = list.CurrentSelection.CellAddress.Row
user avatar alfonz mucha
Odpovědět
Re:Dialogová okna (1.) – vytvoření okna a textová pole
16. 04. 2012, 15:32:19
to lze řešit uzamknutím celého sešitu > spuštěním dialogu > odemknutím sešitu > zapsáním hodnoty > zamknutím sešitu > konec.
user avatar Daniel Sedláček
Odpovědět
Dialogová okna (1.) – vytvoření okna a textová pole
16. 04. 2012, 16:56:38
thisComponent.sheets(0).protect("heslo")
thisComponent.sheets(0).unprotect("heslo")

První příkaz ihned na začátku makra a poslední na jeho konci. List bude zaheslován údajem v závorce, lze ho normálně odmeknout přes menu (při znalosti hesla). Příslušné buňky samozřejmě musí být ve svém formátu uzamčeny.


Práci s listy se bude seriál také věnovat, ale ještě chvilku potrvá než na díl dojde řada.


;o)
user avatar Daniel Sedláček
Odpovědět
Re:Dialogová okna (1.) – vytvoření okna a textová pole
16. 04. 2012, 18:10:14
Omlouvám se samozřejmě to má být opačně.
unprotect("heslo") na začátku a
protect("heslo") na konci


;o)

Odpovědět

 

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