Július Pastierik / 30. 03. 2006, 00:00
Ako sme si už naznačili v minulom dieli, dnes si uvedieme praktické príklady riadenia programu pomocou správ v makre pre vkladanie nezalomiteľných medzier za spojky a predložky.
V minulom dieli sme si podrobne rozobrali možnosti funkcie „msgbox“, pomocou ktorej vypisujeme správy. Táto funkcia je úplne postačujúca na to, aby sme ju použili aj pri rozhodovaní, či budeme alebo nebudeme za spojku „a“ vkladať nezalomiteľnú medzeru. Pretože za verzálku „A“ sa vkladá nezalomiteľná medzera vždy, musíme zmeniť spôsob vyhľadávania spojok tak, že budeme rozoznávať veľké a malé písmená. Najjednoduchšie riešenie môže vyzerať potom napríklad takto:
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
function f_Nezalomitelne_Spojky as long
dim spojky as string
dim tlacidlo as integer
tlacidlo=msgbox("Vložiť nezalomiteľnú medzeru za spojku 'a'?", 36,"Nezalomiteľné medzery")
if tlacidlo=6 then ' Yes
spojky="\<(A|a|I|i|K|k|O|o|S|s|U|u|V|v|Z|z)"
else ' No
spojky="\<(A|I|i|K|k|O|o|S|s|U|u|V|v|Z|z)"
endif
f_Nezalomitelne_Spojky=Vymen_hladanim(spojky,"", NM, true, false, true)
end function
Toto riešenie má však svoje nedostatky – otázka je položená priamo vo funkcii pre vyhľadávanie, takže musíme na ňu odpovedať vždy. Toto nám však nemusí vždy vyhovovať, takže riadenie nezalomiteľnej medzery za spojkou „a“ budeme robiť radšej pomocou parametra:
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
function f_Nezalomitelne_Spojky(spojka_a as boolean) as long
REM Parameter spojka_a určuje, či sa bude (TRUE) alebo nebude (FALSE)
REM vkladať nezalomiteľná medzera za spojku „a“
dim spojky as string
if spojka_a then ' Yes
spojky="\<(A|a|I|i|K|k|O|o|S|s|U|u|V|v|Z|z)"
else ' No
spojky="\<(A|I|i|K|k|O|o|S|s|U|u|V|v|Z|z)"
endif
f_Nezalomitelne_Spojky=Vymen_hladanim(spojky,"", NM, true, false, true)
end function
A vlastnú otázku budeme klásť v procedúrach pre formátovanie textu:
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
sub Nezalomitelne_Spojky
dim tlacidlo as integer
Formatovanie_funkcie.Init
tlacidlo=msgbox("Vložiť nezalomiteľnú medzeru za spojku 'a'?", 36,"Nezalomiteľné medzery")
msgbox("Vložených"+Formatovanie_funkcie.f_Nezalomitelne_Spojky(tlacidlo=6)+"nezalomiteľných medzier.", 0,"Nezalomiteľné spojky a predložky")
end sub
REM Makro pre celkové formátovanie dokumentu
sub Formatuj_Dokument
dim kolko as long
dim tlacidlo as integer
Formatovanie_funkcie.Init
tlacidlo=msgbox("Vložiť nezalomiteľnú medzeru za spojku 'a'?", 36,"Nezalomiteľné medzery")
kolko=Formatovanie_funkcie.f_Rozne_Zameny()
kolko=kolko+Formatovanie_funkcie.f_P_Viacnasobna_Medzera()
kolko=kolko+Formatovanie_funkcie.f_Zmaz_Interpunkcia_Medzera()+Formatovanie_funkcie.f_Vloz_Interpunkcia_Medzera()
kolko=kolko+Formatovanie_funkcie.f_Nezalomitelne_Datumy()+Formatovanie_funkcie.f_Nezalomitelne_Jednociferne_Cisla()+Formatovanie_funkcie.f_Nezalomitelne_Telefonne_Cisla()+Formatovanie_funkcie.f_Nezalomitelne_Merne_Jednotky()
kolko=kolko+Formatovanie_funkcie.f_Nezalomitelne_Tituly()
kolko=kolko+Formatovanie_funkcie.f_Nezalomitelne_Spojky(tlacidlo=6)
msgbox("Prevedných"+kolko+"náhrad.", 0,"Formátovanie textu")
end sub
Pravdaže, môžeme si naprogramovať aj procedúry pre vkladanie medzier za spojky a predložky bez kladenia otázky, ktoré podľa potrieb môžeme priamo volať:
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky vrátane spojky „a“
sub Nezalomitelne_Spojky_s_a
dim tlacidlo as integer
Formatovanie_funkcie.Init
msgbox("Vložených"+Formatovanie_funkcie.f_Nezalomitelne_Spojky(TRUE)+"nezalomiteľných medzier.", 0,"Nezalomiteľné spojky a predložky")
end sub
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky s výnimkou spojky „a“
sub Nezalomitelne_Spojky_bez_a
dim tlacidlo as integer
Formatovanie_funkcie.Init
msgbox("Vložených"+Formatovanie_funkcie.f_Nezalomitelne_Spojky(FALSE)+"nezalomiteľných medzier.", 0,"Nezalomiteľné spojky a predložky")
end sub
Možnosti programovacieho jazyka StarOffice Basic nám však ponúkajú aj iné – zaujímavejšie možnosti. Jednou z nich je tá, že môžeme zadať tzv. voliteľné parametre, t. j. také, ktoré môžeme, ale nemusíme zadať. V definícii parametrov ich zadávame tak, že pred nimi uvedieme kľúčové slovo „Optional“:
function meno (parameter_1 as typ1,…, Optional paramater_x as typ_x)
V takomto prípade musíme, pochopiteľne, vo funkcii vyriešiť prípad, že tento parameter nebol zadaný a v takom prípade mu priradíme nami požadovanú štandardnú hodnotu. Na zistenie, či parameter je alebo nie je zadný nám slúži logická systémová funkcia „IsMissing“, ktorá vráti hodnotu TRUE, ak parameter nie je zadaný. Makro pre vkladanie nezalomiteľných medzier za spojky potom môže vyzerať napríklad takto (predpokladáme, že štandardne chceme za spojku „a“ vkladať nezalomiteľnú medzeru):
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
function f_Nezalomitelne_Spojky(optional spojka_a as boolean) as long
REM Parameter spojka_a určuje, či sa bude (TRUE) alebo nebude (FALSE)
REM vkladať nezalomiteľná medzera za spojku „a“
REM Ak tento parameter nie je zadaný, potom štandardná hodnota je TRUE
dim spojky as string
REM ak parameter spojka_a nie je zadaný, niečim ho musíme nahradiť
dim pom_spojka_a as boolean
if not IsMissing(spojka_a) then ' Parameter je zadaný
pom_spojka_a=spojka_a
else ' Parameter nie je zadaný
pom_spojka_a=TRUE
endif
if pom_spojka_a then ' Yes
spojky="\<(A|a|I|i|K|k|O|o|S|s|U|u|V|v|Z|z)"
else ' No
spojky="\<(A|I|i|K|k|O|o|S|s|U|u|V|v|Z|z)"
endif
f_Nezalomitelne_Spojky=Vymen_hladanim(spojky,"", NM, true, false, true)
end function
Kto požaduje, aby mal štandardnú hodnotu opačnú, nech si svoje makro v rámci domácej úlohy príslušne upraví. Následne môžeme naprogramovať aj príslušné procedúry pre volanie tohto makra napríklad takto:
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
REM Toto makro použijeme vtedy, ak si chceme vybrať, či za spojku „a“ budeme
REM alebo nebudeme vkladať nezalomiteľné medzery
sub Nezalomitelne_Spojky
dim tlacidlo as integer
Formatovanie_funkcie.Init
tlacidlo=msgbox("Vložiť nezalomiteľnú medzeru za spojku 'a'?", 36,"Nezalomiteľné medzery")
msgbox("Vložených"+Formatovanie_funkcie.f_Nezalomitelne_Spojky(tlacidlo=6)+"nezalomiteľných medzier.", 0,"Nezalomiteľné spojky a predložky")
end sub
REM Makro pre celkové formátovanie dokumentu
REM V tomto makre budeme používať štandardnú hodnotu pre riadenie vkladania
REM nezalomiteľnej medzery za spojku „a“
sub Formatuj_Dokument
dim kolko as long
Formatovanie_funkcie.Init
kolko=Formatovanie_funkcie.f_Rozne_Zameny()
kolko=kolko+Formatovanie_funkcie.f_P_Viacnasobna_Medzera()
kolko=kolko+Formatovanie_funkcie.f_Zmaz_Interpunkcia_Medzera()+Formatovanie_funkcie.f_Vloz_Interpunkcia_Medzera()
kolko=kolko+Formatovanie_funkcie.f_Nezalomitelne_Datumy()+Formatovanie_funkcie.f_Nezalomitelne_Jednociferne_Cisla()+Formatovanie_funkcie.f_Nezalomitelne_Telefonne_Cisla()+Formatovanie_funkcie.f_Nezalomitelne_Merne_Jednotky()
kolko=kolko+Formatovanie_funkcie.f_Nezalomitelne_Tituly()
kolko=kolko+Formatovanie_funkcie.f_Nezalomitelne_Spojky()
msgbox("Prevedných"+kolko+"náhrad.", 0,"Formátovanie textu")
end sub
Ako vidíme, procedúra Formatuj_Dokument sa vrátila k podobe, v akej sme ju používali doteraz.
Na budúce: Práca s externými textovými súbormi, alebo ako si nastavenia uložiť na disk.
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