Július Pastierik / 21. 02. 2007, 00:00
V ďalšom pokračovaní nášho seriálu o programovaní makier si ukážeme, ako sa dá vytvoriť dialóg s príslušnými makrami pre ukladanie nastavení do rôznych profilov.
V minulom dieli sme si ukázali, ako je možné ukladať súbory do adresárov, ktoré sú závislé od používateľa počítača. Dnes tieto služby využijeme naplno a rozšírime ich ešte o možnosť vytvárania vlastných používateľských profilov.
Na tento účel si zadefinujeme ďalší dialóg,ktorý nazveme povedzme „Dialog_Profily“. Vložíme do neho nasledovné prvky:
kombinované rozbalovacie textové pole „Zoznam_Profilov“, v ktorom budeme mať následne zobrazené všetky profily;
vstupné textové pole „Novy_Profil“ pre zadávanie názvov nových profilov,
tlačidlo „Pridaj“ pre potvrdenie nového profilu;
tlačidlo „Zmeň“ pre editovanie vybraného profilu;
tlačidlo „Vymaž“ pre vymazanie vybraného profilu;
tlačidlá „OK“ a „Cancel“ pre ukončenie činnosti.
Okrem toho si môžeme pridať informačný text, že „Štandardne je nastavený profil "Default", ktorý nie je možné vymazať“. Pokiaľ chceme, aby sa tento text zobrazoval na viacero riadkov, je potrebné na príslušných miestach vložiť kombináciu kláves „Shift“+“Enter“, ktorá to umožňuje.
Teraz sa pozrime na vlastné makrá, ktoré budeme pre prácu potrebovať. Vzhľadom na to, že sú úzko previazané aj s dialógom pre nastavovanie parametrov formátovania dokumentu (ktorý sme si už uvádzali) a s vlastnými funkciami pre toto formátovanie, je ich značné množstvo a preto ich neuvedieme naraz, ale postupne v niekoľkých dieloch tohto seriálu. Dnes sa budeme venovať iba tým, ktoré priamo súvisia s dialógom „Dialog_Profily“.
Vytvorme si v zozname makier nový modul „Profily_funkcie“, kde vložíme (zatiaľ) nasledovné definície premenných a procedúry (budeme ich priebežne komentovať):
dim dlg as object
dim zoznam_profilov(50) as string
dim pocet_profilov as integer
global priznaky_formatovania(16) as integer
global aktualny_profil as string
dim oVstupy as object
Objektová premenná „dlg“ je určená na vlastné priradenie dialógu „Dialog_Proflily“. Musí byť definovaná externe preto, lebo sa na ňu odvolávame vo funkciách, ktoré sú priradené k tlačidlám „Pridaj“, „Zmeň“ a „Vymaž“.
V premennej „zoznam_profilov“ budeme mať uložené názvy profilov. Jej rozsah sme si dali 50 profilov, čo je určite viac než dostatočný počet pre jedného používateľa. Pokiaľ nie, stačí jednoduchá zmena tohto parametra. Táto premenná je určená na testovanie názvov profilov pri ich pridávaní, aby sme nemali dva rovnaké profily. Počet profilov máme uložený v nasledujúcej premennej „pocet_profilov“.
S globálnou premennou „priznaky_formatovania“ sa dnes ešte nestretneme, lebo je určená pre dialóg „Dialog_formatovanie“, ktorý sme si už navrhovali, ale jeho makrá budeme popisovať až nabudúce. Táto premenná je preto globálna, lebo sa podľa nej riadi celá množina funkcií pre formátovanie dokumentu, ktoré si tak isto budeme uvádzať až nabudúce.
Do globálnej premennej „aktualny_profil“ uložíme nakoniec vybraný profil. Podobne, ako premenná „priznaky_formatovania“ je určená pre neustálu informáciu o tom, aký profil práve chceme používať pre formátovanie dokumentu.
Pomocná premenná „oVstupy“ je určená pre pridávanie a odoberanie položiek do zoznamu profilov vo vlastnom dialógu.
A teraz sa pozrime na vlastné funkcie. Pretože makrá sú pomerne dobre okomentované, nebudeme bližšie rozoberať to, ako sú naprogramované.
function inicializacny_subor (nazov_suboru as string) as string
' Funkcia vracia názov inicializačného súboru v „UserConfig“ adresári aktuálneho používateľa
' K názvu súboru pridávame automaticky príponu „.dat“
dim cesty as object
cesty=CreateUnoService("com.sun.star.util.PathSettings")
inicializacny_subor=cesty.UserConfig+"/"+nazov_suboru+".dat"
end function
sub zapis_nazvy_profilov
' Procedúra je určená na zápis názov profilov do definičného súboru
dim i, subor as integer
subor = Freefile
open inicializacny_subor("Zoznam_Profilov_Formatovania_Dokumentov") for Output as #subor
for i=0 to pocet_profilov
print #subor,zoznam_profilov(i)
next i
close #subor
end sub
sub init_dialog_profily
' Inicializácia zoznamu profilov z definičného súboru
' Vždy máme minimálne profil „Default“
dim i, subor as integer
dim riadok as string
zoznam_profilov(0)="Default"
pocet_profilov=0
oVstupy=dlg.getControl("Zoznam_Profilov")
oVstupy.AddItem("Default",0)
' Ak nastavovací súbor neexistuje, vytvoríme ho
if not fileexists(inicializacny_subor("Zoznam_Profilov_Formatovania_Dokumentov")) then
zapis_nazvy_profilov
endif
' Teraz súbor určite existuje - načítame ho
subor = Freefile
open inicializacny_subor("Zoznam_Profilov_Formatovania_Dokumentov") for Input as #subor
' Inicializácia pomocného počítadla počtu profilov
i=0
While not eof(subor)
Line Input #subor, riadok
if i>0 then
' Profil Default už máme zapísaný v zozname, zaujímajú nás iba tie ostatné
pocet_profilov=pocet_profilov+1 ' aktuálny počat profilov
oVstupy.AddItem(riadok,pocet_profilov) ' pridanie profilu do dialógu
zoznam_profilov(pocet_profilov)=riadok ' pridanie profilu do zoznamu pre testovanie
end if
i=i+1
wend
close #subor
dlg.model.Zoznam_Profilov.Text="Default" ' Aby sa nám zobrazil v zozname prvý profil
end sub
sub Vloz_profil_Initiated
' Túto procedúru musíme priradiť k tlačidlu „Pridaj“ !
pom_text=dlg.model.Novy_profil.Text
if pom_text<>"" then
' Názov musí byť zadaný
existuje=false
for i=0 to pocet_profilov
' Otestujeme či profil s daným názvom existuje bez ohľadu na veľkosť písmen
existuje=existuje or (ucase(pom_text)=ucase(zoznam_profilov(i)))
next i
if not existuje then
' Ak profil neexistuje, pridáme ho do zoznamu
oVstupy=dlg.getControl("Zoznam_Profilov")
pocet_profilov=pocet_profilov+1
zoznam_profilov(pocet_profilov)=pom_text
oVstupy.AddItem(pom_text,pocet_profilov)
else
' Oznam o tom, že nie je možné pridať už existujúci profil
msgbox "Profil "+pom_text+" už existuje."
end if
else
'Oznam o tom, že názov musí byť zadaný
msgbox "Názov musí byť zadaný"
end if
end sub
sub Vymaz_profil_Initiated
' Túto procedúru musíme priradiť k tlačidlu „Vymaž“ !
oVstupy=dlg.getControl("Zoznam_Profilov")
' Priradenie názvu vybraného profilu do pomocnej premennej
pom_text=dlg.model.Zoznam_Profilov.Text
if pom_text<>"Default" then
' Mažeme iba iné profily ako je „Default“
for i=1 to pocet_profilov
' Vyhľadáme pozíciu vybraného profilu
if pom_text=zoznam_profilov(i) then
' Vymažeme profil z dialógu
oVstupy.removeItems(i,1)
for j=i to pocet_profilov-1
' Vymažeme profil z pomocného zoznamu a posunieme položky v zozname
zoznam_profilov(j)=zoznam_profilov(j+1)
next j
end if
next i
' Upravíme počet záznamov
pocet_profilov=pocet_profilov-1
' Nastavíme zobrazovaný text v rozbaľovacom poli, lebo predtým zobrazený sme práve vymazali
dlg.model.Zoznam_Profilov.Text="Default"
else
' Oznam o tom, že nemôžeme vymazať profil „Default“
msgbox "Profil Deafault nie je možné vymazať!"
end if
end sub
sub Zmen_profil_Initiated
' Túto procedúru musíme priradiť k tlačidlu „Zmeň“ !
' Uloženie názvu vybraného profilu do pomocnej premennej
pom_text=dlg.model.Zoznam_Profilov.Text
' Nastavenie parametrov pre formátovanie
Spusti_dialog_formatovania(pom_text)
end sub
sub Nastav_Profil_Formatovania
' Vlastná funkcia pre spustenie dialógu „Dialog_profily“
DialogLibraries.LoadLibrary("Vlastne_makra")
dlg=CreateUnoDialog(DialogLibraries.Vlastne_makra.Dialog_Profily)
init_dialog_profily
Citaj_definiciu_profilu("Default")
if dlg.Execute()=1 then
zapis_nazvy_profilov
Aktualny_profil=dlg.model.Zoznam_profilov.text
end if
' Ak nie je náhodou vybraný žiadny profil, nastaví sa profil „Default“
if Aktualny_profil="" then
Aktualny_profil="Default"
end if
Formatovanie.Nastav_formatovanie
dlg.dispose()
end sub
Procedúry „Spusti_dialog_formatovanie“ (bola volaná v procedúre „Zmen_profil_Initiated“) a „Formatovanie.Nastav_formatovanie“ (bola volaná v procedúre „Nastav_Profil_Formatovania“) budú uvedené v ďalších dieloch seriálu.
Na budúce: Procedúry dialógu pre nastavovanie parametrov formátovania dokumentu, alebo makier pribúda a pribúda.
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