Makrá v OpenOffice.org 3/II. – Riadenie programu správami

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

Nezalomitelne medzeryToto 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.



Neprehliadnite: