Július Pastierik / 05. 09. 2007, 00:00
V ďalšom pokračovaní seriálu o programovaní makier v OpenOffice.org si vytvoríme vlastný dialóg pre hľadanie a nahrádzanie textu.
Pri praktickej práci s OpenOffice.org často používame dialógové okno „Nájsť a nahradiť“ (klávesová skratka „Ctrl + F“). Mnohým však nevyhovuje to, že napríklad zaškrtávacie políčko pre regulárne výrazy sa zobrazí až po stlačení tlačidla „Viac volieb“, pričom si OpenOffice.org nepamätá ani jeho predchádzajúce nastavenie. Toto platí pre každé otvorenie tohto dialógového okna, takže ak často používame práve regulárne výrazy, je táto práca veľmi spomalená.
Preto si teraz naprogramujeme vlastné dialógové okno pre nahrádzanie textu. V doterajších dieloch sme si naprogramovali dve vlastné funkcie, pomocou ktorých sme nahrádzali jeden reťazec druhým. Konkrétne ide o funkcie „Vymen“ a „Vymen_hladanim“, ktoré sme si uložili do modulu makier „Formatovanie_funkcie“.
V stručnosti si pripomeňme, že funkcia „Vymen“ využíva štandardné služby pre zámenu reťazcov s tým, že môžeme nastaviť tri logické parametre pre vyhľadávanie – regulárne výrazy, celé slová a rozlišovanie veľkosti písmen. Funkcia „Vymen_hladanim“ je už zložitejšia, pretože ako parametre nemáme dva, ale tri reťazce. Je to tak preto, lebo v tejto funkcii zamieňame celý nájdený reťazec, ale iba jeho vnútornú časť. Pravdaže, aj tu máme možnosť použiť už spomenuté tri logické parametre pre vyhľadávanie.
Tieto funkcie sa nám preto priamo ponúkajú na to, aby sme si pripravili vlastný dialóg pre vyhľadávanie. Dialóg nazveme „Dialog_Zamena“ a musí obsahovať aspoň tieto položky: tri textové polia, ktoré nazveme „V_retazci“, „Hladat“ a „Nahradit_za“; tri zaškrtávacie políčka – „Regularne_vyrazy“, „Cele_slova“ a „Velke_pismena“; dve tlačidlá – „Zamenit“, ktorému priradíme typ tlačidla „OK“ a „Zrusit“, ktorému priradíme typ „Cancel“ („Zrušiť“). Okrem toho si jednotlivé položky doplníme vhodnými textovými popismi.
Vlastnej tvorbe dialógu sa už, samozrejme, nebudeme venovať, pretože na to boli určené predchádzajúce diely, kde sme sa tomu podrobne venovali. Teraz nám nezostáva už nič iné, iba naprogramovať vlastné makrá pre obsluhu tohto dialógu s následným volaním už spomínaných vyhľadávacích funkcií.
Aby sme nemuseli zadávať špeciálne zaškrtávacie políčko pre rozlíšenie situácie, kedy chceme využiť funkciu „Vymen“ a kedy funkciu „Vymen_hladanim“, rozlíšime to automaticky podľa toho, či zadáme text do dialógovej textovej premennej V“_retazci“. Ak áno, tak budeme používať funkciu „Vymen_hladanim“, ak nie, tak funkciu „Vymen“. Napokon, z vlastného makra je dosť jasné a prípadne si toto môžete uviesť ako doplňujúcu textovú informáciu aj do vytváraného dialógu.
Aby sa zadané hodnoty a parametre pamätali aj pri nových spusteniach tohto dialógu, príslušné premenné zadefinujeme ako typ GLOBAL. Pretože OpenOffice.org automaticky nastavuje premenné pri ich deklarácii na nulové hodnoty, nemusíme sa starať o to, aké hodnoty budú mať pred prvým spustením. Musíme však počítať s tým, že ak náhodou toto nastavenie nebude v niektorej verzii alebo na niektorom operačnom systéme fungovať, tak pri pri prvom spustení uvidíme náhodné hodnoty.
Makrá si pre lepšiu orientáciu uložíme do modulu „Specialna_zamena“. Pre vlastné vyvolanie s pustenie dialógu so zámenami voláme procedúru „Specialne_zamen“, pričom na konci si vypíšeme, koľko výmen bolo urobených.
REM Premenné si zadefinujeme ako global, aby sa pamätali aj pri ďalšom spustení
REM Pozor! Pri prvom spustení môžu obsahovať náhodné veličiny
global zamen_V_retazci, zamen_Hladat, zamen_Nahradit_za as string
global zamen_Regularne_vyrazy, zamen_Cele_slova, zamen_Velke_pismena as boolean
sub Init_dialog_zameny(oDialog as object)
REM Inicializácia prvkov dialógu
oDialog.model.V_retazci.Text = zamen_V_retazci
oDialog.model.Hladat.Text = zamen_Hladat
oDialog.model.Nahradit_za.Text = zamen_Nahradit_za
if zamen_Regularne_vyrazy then
oDialog.model.Regularne_vyrazy.State=1
else
oDialog.model.Regularne_vyrazy.State=0
endif
if zamen_Cele_slova then
oDialog.model.Cele_slova.State=1
else
oDialog.model.Cele_slova.State=0
endif
if zamen_Velke_pismena then
oDialog.model.Velke_pismena.State=1
else
oDialog.model.Velke_pismena.State=0
endif
end sub
sub vykonaj_zamenu(oDialog as object)
REM Vlastná zámena podľa zadaných hodnôt v dialógu
dim kolko as long
REM Príprava globálnych premenných
zamen_V_retazci = oDialog.model.V_retazci.Text
zamen_Hladat = oDialog.model.Hladat.Text
zamen_Nahradit_za = oDialog.model.Nahradit_za.Text
zamen_Regularne_vyrazy = oDialog.model.Regularne_vyrazy.State=1
zamen_Cele_slova = oDialog.model.Cele_slova.State=1
zamen_Velke_pismena = oDialog.model.Velke_pismena.State=1
REM Príprava dokumentu pre zámenu
Formatovanie_funkcie.Init
if zamen_V_retazci="" then
REM Ak nezadáme reťazec "V_retazci", zamieňame priamo
kolko=Formatovanie_funkcie.Vymen(zamen_Hladat, zamen_Nahradit_za, zamen_Regularne_vyrazy, zamen_Cele_slova, zamen_Velke_pismena)
else
REM Ak zadáme reťazec "V_retazci", zanieňame špeciálne
kolko=Formatovanie_funkcie.Vymen_hladanim(zamen_V_retazci, zamen_Hladat, zamen_Nahradit_za, zamen_Regularne_vyrazy, zamen_Cele_slova, zamen_Velke_pismena)
endif
msgbox("Prevedných "+kolko+" zámien.", 0,"Špeciálne zámeny")
end sub
sub Specialne_zamen
dim oDialog as object
oDialog=CreateUnoDialog(DialogLibraries.Vlastne_makra.Dialog_Zamena)
Init_dialog_zameny(oDialog)
if oDialog.Execute()=1 then
vykonaj_zamenu(oDialog)
endif
oDialog.dispose()
end sub
Na budúce: Makro pre typografické úpravy textu, alebo pozrime sa aj na „konkurenciu“.
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