Július Pastierik / 02. 11. 2006, 00:00
Pri praktickej práci niekedy požadujeme, aby sme si mohli vyberať hodnoty z určitého preddefinovaného zoznamu. A práve na takéto typy makier sa zameriame v dnešnom pokračovaní nášho seriálu.
Určite sa už mnohí stretli s problematikou, keď si potrebovali vybrať určitú množinu údajov (napr. kalendárne mesiace), podľa ktorých chceli následne vykonať určité operácie. Preto si v dnešnom dieli ukážeme, ako si dokážeme vytvoriť jednoduchý dialóg so základnými funkciami pre presúvanie údajov z preddefinovaného zoznamu do druhého. Pravdaže, následné spracovanie vybraných údajov už záleží iba od od konkrétnych požiadavok toho-ktorého používateľa a nebudeme sa tým teraz zaoberať.
Ako prvé, čo urobíme, je pochopiteľne vlastný návrh príslušného dialógu (povedzme si ho nazveme „Dialog2“). Ten sa bude skladať z dvoch zoznamov, pričom do prvého z nich si zároveň zadefinujeme vstupné hodnoty. Tieto sa zadávajú v položke „Zoznam záznamov“, pričom musíme upozorniť na to, že pri ich zadávaní sa musí na ich oddelenie používať kombinácia kláves „Shift“+“Enter“. Ukončenie zadávania následne vykonáme zadaním obyčajnej klávesy „Enter“.
Pravdaže, nemusíme používať iba tento spôsob inicializácie, a hodnoty môžeme zadať podobne, ako sme to robili pri číselných alebo textových vstupoch v príslušnom makre pred spustením vlastného dialógu.
Okrem definície záznamov si musíme do dialógu zadefinovať aj tlačidlá pre presun údajov medzi jednotlivými okienkami. Aby sme ukázali všetky možnosti presunu údajov, zadefinujeme si štyri tlačidlá, ktoré budú postupne reprezentovať možnosť presunu jedného vybraného prvku alebo všetkých prvkov zo zdrojového zoznamu do výberu a prípadné spätné vrátenie jedného prvku alebo všetkých prvkov nazad do pôvodného zdrojového zoznamu. Spätné vrátenie je určené vlastne na opravy a preto nebudeme v dialógu definovať klávesu „Cancel“.
Pri jednotlivých tlačidlách musíme, pochopiteľne, definovať aj inicializačné procedúry, ktoré sa vykonajú po ich stlačení.
sub PresunVybrany_Initiated
REM Procedúra pre presun vybraného prvku zo zdrojového zoznamu
dim vstupne_pole, vystupne_pole as object
' Priradíme si riadenie zoznamov k dvom pomocným premenným
vstupne_pole=dlg.getControl("Zoznam_1") ' Zdrojový zoznam
vystupne_pole=dlg.getControl("Zoznam_2") ' Vytváraný zoznam
if vstupne_pole.SelectedItem>0 then
' Ak sme vybrali nejaký prvok v zdrojovom zozname, tak ho pridáme na začiatok vytváraného zoznamu
vystupne_pole.AddItem(vstupne_pole.SelectedItem,0)
' Vybraný prvok následne vymažeme zo zdrojového zoznamu
vstupne_pole.removeItems(vstupne_pole.SelectedItemPos,1)
end if
end sub
sub PresunVsetko_Initiated
REM Procedúra pre presun všetkých prvkov zo zdrojového zoznamu
dim i as integer
dim vstupne_pole as object
vstupne_pole=dlg.getControl("Zoznam_1")
' Cyklus pre všetky prvky pôvodného zoznamu
for i=lbound(dlg.model.Zoznam_1.StringItemList()) to ubound(dlg.model.Zoznam_1.StringItemList())
' Vyberieme vždy prvý prvok (má index 0), pretože následným vymazaním sa zoznam posúva
vstupne_pole.SelectItem(dlg.model.Zoznam_1.StringItemList(0),1)
' Prevedieme vlastný presun pomocou už naprogramovanej procedúry pre presun jedného vybraného prvku
PresunVybrany_Initiated
next i
end sub
sub VratVybrany_Initiated
REM Procedúra pre vrátenie vybraného prvku do zdrojového zoznamu
dim vstupne_pole, vystupne_pole as object
vstupne_pole=dlg.getControl("Zoznam_1")
vystupne_pole=dlg.getControl("Zoznam_2")
if vystupne_pole.SelectedItem>0 then
vstupne_pole.AddItem(vystupne_pole.SelectedItem,0)
vystupne_pole.removeItems(vystupne_pole.SelectedItemPos,1)
end if
end sub
sub VratVsetko_Initiated
REM Procedúra pre vrátenie všetkých prvkov do zdrojového zoznamu
dim i as integer
dim vystupne_pole as object
vystupne_pole=dlg.getControl("Zoznam_2")
for i=lbound(dlg.model.Zoznam_2.StringItemList()) to ubound(dlg.model.Zoznam_2.StringItemList())
vystupne_pole.SelectItem(dlg.model.Zoznam_2.StringItemList(0),1)
VratVybrany_Initiated
next i
end sub
Teraz si trochu vysvetlíme použité metódy, aby sme si v prípade potreby mohli naprogramovať aj makrá s inými vlastnosťami.
Metóda AddItem(vkladaný prvok, pozícia) je určená na vkladanie prvkov a má dva parametre – prvý je text, ktorý vkladáme do príslušného zoznamu a druhý je pozícia, na ktorú ho vkladáme. Pozor, pri textových poliach každá Indexácia začína od 0. Pomocou tejto metódy by sme mohli inicializovať zoznam mesiacov napr. takto:
sub Init_mesiace
dim vstupne_pole as object
vstupne_pole=dlg.getControl("Zoznam_1")
' Prvky budeme vkladať na začiatok, preto ich musíme zadať v poradí od posledného ku prvému
vstupne_pole.AddItem("December",0)
vstupne_pole.AddItem("November",0)
vstupne_pole.AddItem("Október",0)
vstupne_pole.AddItem("September",0)
vstupne_pole.AddItem("August",0)
vstupne_pole.AddItem("Júl",0)
vstupne_pole.AddItem("Jún",0)
vstupne_pole.AddItem("Máj",0)
vstupne_pole.AddItem("Apríl",0)
vstupne_pole.AddItem("Marec",0)
vstupne_pole.AddItem("Február",0)
vstupne_pole.AddItem("Január",0)
end sub
Metóda RemoveItems(pozícia prvku, počet) je určená na mazanie prvkov a má dva parametre – prvý je pozícia prvého vymazávaného prvku a druhá počet vymazávaných prvkov.
Ako ste si mohli všimnúť, zoznam všetkých prvkov nájdeme v položke StringItemList, t.j. v našom prípade dlg.model.Zoznam_1.StringItemList alebo dlg.model.Zoznam_2.StringItemList.
Nakoniec si ešte uvedieme príklad makra pre vlastnú inicializáciu tohto dialógu:
sub makro_zoznam
DialogLibraries.LoadLibrary("Standard")
dlg=CreateUnoDialog(DialogLibraries.Standard.Dialog2)
dlg.Execute()
REM tu si musí každý vložiť svoje príkazy pre spracovanie vybraných prvkov zoznamu
dlg.dispose()
end sub
Na budúce: Ďalšie vstupné polia, alebo textové zoznamy na pokračovanie.
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk