Makrá v OpenOffice.org 6/VII. – Vlastný dialóg pre zámeny

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á.

Okno nahradiť po otvorení

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“.

Okno nahradiť s rozšírenými možnosťami

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.

Návrh vlastného dialógu pre náhrady

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.

Štandardná zámena jedného reťazca za druhý

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.

Zámena vo vnútri nájdeného reťazca

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“.

Neprehliadnite: