Archív Inet.sk Pôvodný autor: Július Pastierik
17. 02. 2010 o 10:02 2559x

Makrá v OpenOffice.org – zobrazenie priebehu vykonávania

Potrebujete opticky vidieť, koľko bude vaše makro ešte asi pracovať? Zobrazte si priebeh jeho vykonávania.
Makrá v OpenOffice.org – zobrazenie priebehu vykonávania

 

Pri časovo náročných makrách je výhodné, ak opticky vidíte, že makro ešte pracuje. Na tento účel sa používa tzv. panel priebehu, ktorý sa definuje v dialógovom okne a, následne, priamo v makre sa nastavuje aktuálna hodnota priebehu.

Výber panelu priebehu počas definície dialóguPri vlastnej definícii tohto panelu sa nastavuje minimálna a maximálna hodnota priebehu. Okrem toho je vhodné, ak počas prípravy dialógového okna nastavíte aktuálnu hodnotu totožnú s maximálnou hodnotou, aby ste videli, ako bude vyzerať celý panel priebehu. Toto odporučenie je iba z toho dôvodu, aby ste nevložili iný údaj na miesto, kde sa počas behu makra bude vykresľovať vlastný priebeh.

Pretože OpenOffice.org sa sám stará o prepočítavanie aktuálnej hodnoty na počet vykreslených políčok a pretože minimálny, maximálny či aktuálny počet môžu byť ľubovoľné celé čísla, je používanie panelu priebehu veľmi jednoduché a pohodlné.

Samozrejme, niekedy viete už pri definícii panelu priebehu, akú minimálnu a maximálnu hodnotu môže priebeh nadobudnúť, no inokedy nie. Pokiaľ chcete takýto panel využiť, musíte v takomto prípade zistiť tieto hodnoty vo vlastnom makre.

Aby sme si ukázali príklad, kedy vopred neviete maximálnu hodnotu, budeme aplikovať tento panel v makre pre skrývanie a odkrývanie textu, ktoré sme si v počiatočnej verzii predstavili v článku „Makrá v OpenOffice.org – Skrývanie a odkrývanie textu“. Pretože v tomto makre pri odhaľovaní skrytého textu prechádzame všetky znaky je minimálna hodnota nula a maximálna hodnota je celkový počet znakov dokumentu.

Žiaľ, OpenOffice.org nám nedokáže vopred oznámiť počet skrytých znakov (nepočíta ich dokonca ani do celkového počtu znakov dokumentu) a preto sa môže stať, že ním oznámený počet znakov dokumentu je iný (môže byť teoreticky aj nulový), ako skutočný a preto ošetríme tento prípad v makre – ako pri počiatočnej hodnote, tak aj pri nájdení skrytého znaku.

Definícia panelu priebehu

A, aby sme makro dotiahli do čo maximálnej dokonalosti, vložíme do dialógu, ktorý zobrazuje priebeh aj tlačidlo „Preruš“, pomocou ktorého dokážeme, ak budeme vidieť, že makro by pracovalo extrémne dlho, prerušiť priebeh jeho vykonávania. Okrem toho, pokiaľ pri odkrývaní skrytých znakov nenastavujeme ich parametre, automaticky ich odkryjeme v celom dokumente bez toho, aby sme ho pracne prehľadávali znak po znaku.

Panel priebehu počas behu makra

dim dlg as object
dim pokracuj_dlgc as boolean ' Indikácia prerušenia hľadania pomocou tlačidla "Preruš" v dialógu priebehu

REM Makro pre nastavenie prerušenia hľadania
sub Prerus_Initiated
 pokracuj_dlgc=FALSE ' Indikácia prerušenia hľadania
end sub

REM Makro pre skrytie označeného textu
sub Skry_text_Initiated
 dim oKurzor as object
 okurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
 okurzor.CharHidden=TRUE ' Skrytie textu
end sub

REM Makro pre odkrytie textu v celom dokumente, pričom sa nastavia parametre podľa dialógu
sub Odkry_text_Initiated
 dim oKurzor as object
 dim este as boolean
 dim pom_text as string
 dim kolko, absolutne, znakov as long
 dim dlgc, oUkazujPriebeh as object
  
 oKurzor=StarDesktop.CurrentComponent.Text.CreateTextCursor() ' Vytvoríme nový textový kurzor, ktorým prejdeme celý dokument
 
 oKurzor.gotoStart(false) ' Skočíme na začiatok dokumentu
 kolko=0 ' Počet skrytých znakov
 absolutne=0 ' Počet prehľadaných znakov
 
 REM Ak označujeme a nič nenastavujeme, nemusíme prehľadávať dokument znak po znaku, ale v celom dokumente môžeme naraz nastaviť viditeľnosť znakov.
 REM V tomto prípade však nezistíme počet a preto oznámime iba vykonanie odkrytia skrytých znakov
 if dlg.model.OptionOdkry.State=1 and dlg.model.Check_Preciarkni.State=0 and _
    dlg.model.Check_Podciarkni.State=0 and dlg.model.Check_Text.State=0 and dlg.model.Check_Pozadie.State=0 then ' Ak označujeme a nič nenastavujeme
  okurzor.gotoEnd(True) ' Skočíme na koniec dokumentu a označíme ho
  oKurzor.CharHidden=FALSE ' Zviditeľnenie textu
  oKurzor.collapseToEnd() ' Zrušíme označenie textu a skočíme na jeho koniec
  if dlg.model.Oznamovanie.State=1 then ' Ak oznamujeme ukončenie vyhľadávania
   msgbox "Skryté znaky boli odkryté."
  end if
  exit sub ' Ukončenie procedúry
 end if
 
 znakov=ThisComponent.CharacterCount ' Celkový počet znakov v dokumente (Pozor, OO.o tu nepočíta skryté znaky!)
 if znakov=0 then znakov=1 ' V teoreticky prázdnom dokumente nastavíme počet na jeden znak, aby nebola koncová hodnota totožná s počiatočnou (0)
 
 DialogLibraries.LoadLibrary("JP_Skryty_text") ' Otvorenie knižnice

 dlgc=CreateUnoDialog(DialogLibraries.JP_Skryty_text.Dialog_Cakaj) ' Otvorenie dialógu priebehu (s možnosťou prerušenia hľadania)
 oUkazujPriebeh=dlgc.getModel().getByName("UkazujPriebeh") ' Panel priebehu v dialógu priebehu
 oUkazujPriebeh.setPropertyValue("ProgressValueMin", 0) ' Nastavenie minimálnej hodnoty priebehu (0)
 oUkazujPriebeh.setPropertyValue("ProgressValueMax", znakov) ' Nastavenie maximálnej hodnoty priebehu (celkový počet znakov v dokumente)
 
 dlgc.setVisible(true) ' Zviditeľnenie dialógu priebehu
 
 pokracuj_dlgc=TRUE ' Indikácia neprerušenia hľadania

 do
  absolutne=absolutne+1 ' Počet všetkých prehľadaných znakov
  oUkazujPriebeh.setPropertyValue( "ProgressValue",absolutne) ' Nastavenie aktuálnej hodnoty priebehu (počet prehľadaných znakov)
  este=oKurzor.goRight(1,true) ' Označíme jeden znak
  if este then ' Ak sme označili znak
   if oKurzor.CharHidden then ' Ak je znak skrytý
    oUkazujPriebeh.setPropertyValue("ProgressValueMax", znakov+kolko) ' Úprava maximálnej hodnoty podľa aktuálneho počtu skrytých znakov
    kolko=kolko+1 ' Počet nájdených skrytých znakov
    if dlg.model.OptionVymaz.State=1 then ' Mažeme skryté znaky
     oKurzor.string=""
    else ' Označujeme skryté znaky
     oKurzor.CharHidden=FALSE ' Zviditeľnenie textu
     if dlg.model.Check_Preciarkni.State=1 then ' Chceme predtým neviditeľný text po zviditeľnení prečiarknúť
      pom_text=trim(dlg.getControl("Box_Preciarkni").Text)
      select case pom_text
       case "None"
        oKurzor.CharStrikeout=com.sun.star.awt.FontStrikeout.NONE
       case "Single"
        oKurzor.CharStrikeout=com.sun.star.awt.FontStrikeout.SINGLE
       case "Double"
        oKurzor.CharStrikeout=com.sun.star.awt.FontStrikeout.DOUBLE
       case "Don't Know"
        oKurzor.CharStrikeout=com.sun.star.awt.FontStrikeout.DONTKNOW
       case "Bold"
        oKurzor.CharStrikeout=com.sun.star.awt.FontStrikeout.BOLD
       case "Slash"
        oKurzor.CharStrikeout=com.sun.star.awt.FontStrikeout.SLASH
       case "X"
        oKurzor.CharStrikeout=com.sun.star.awt.FontStrikeout.X
      end select
     endif
    
     if dlg.model.Check_Podciarkni.state=1 then ' Chceme predtým neviditeľný text po zviditeľnení podčiarknúť
      pom_text=trim(dlg.getControl("Box_Podciarkni").Text)
      select case pom_text
       case "None"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.NONE
       case "Single"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.SINGLE
       case "Double"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.DOUBLE
       case "Dotted"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.DOTTED
       case "Don't Know"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.DONTKNOW
       case "Dash"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.DASH
       case "Long Dash"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.LONGDASH
       case "Dash Dot"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.DASHDOT
       case "Dash Dot Dot"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.DASHDOTDOT
       case "Small Wave"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.SMALLWAVE
       case "Wave"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.WAVE
       case "Double Wave"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.DOUBLEWAVE
       case "Bold"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.BOLD
       case "Bold Dotted"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.BOLDDOTTED
       case "Bold Dash"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.BOLDDASH
       case "Bold Long Dash"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.BOLDLONGDASH
       case "Bold Dash Dot"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.BOLDDASHDOT
       case "Bold Dash Dot Dot"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.BOLDDASHDOTDOT
       case "Bold Wave"
        oKurzor.CharUnderline=com.sun.star.awt.FontUnderline.BOLDWAVE
      end select
     endif
     
     if dlg.model.Check_Text.state=1 then ' Chceme predtým neviditeľný text po zviditeľnení zafarbiť
      oKurzor.CharColor=(dlg.model.RT.value*256+dlg.model.GT.value)*256+dlg.model.BT.value ' Prepočet zadanej farby na číslo
     endif
     
     if dlg.model.Check_Pozadie.state=1 then ' Chceme predtým neviditeľný text po zviditeľnení podfarbiť
      oKurzor.CharBackColor=(dlg.model.RP.value*256+dlg.model.GP.value)*256+dlg.model.BP.value ' Prepočet zadanej farby na číslo
     endif
    endif
   endif
   
   oKurzor.collapseToEnd() ' Zrušíme označenie znaku a skočíme na jeho koniec
  endif
 loop while (este and pokracuj_dlgc)' cyklus opakujeme, kým nebume za posledným znakom dokumentu a kým neprerušíme hľadanie
 dlgc.dispose()
 if dlg.model.Oznamovanie.State=1 then ' Ak vypisujeme počet
  if dlg.model.OptionVymaz.State=1 then ' Ak sme mazali
   msgbox "Vymazaných "+kolko+" skrytých znakov."
  else ' Ak sme označovali
   msgbox "Odkrytých "+kolko+" skrytých znakov."
  endif
 end if
end sub

sub Zmen_odkry_vymaz_Initiated
 if dlg.model.OptionOdkry.State=1 then dlg.model.Odkry.Label="Odkry"
 if dlg.model.OptionVymaz.State=1 then dlg.model.Odkry.Label="Vymaž"
end sub

REM Makro, ktoré zneviditeľní dialóg – t.j. nastaví, že sa má ukončiť čakací cyklus (volané stlačením klávesy "Koniec" v dialógu)
sub Koniec_Skry_Odkry_Initiated
 dlg.setVisible(false )' Zneviditeľnenie dialógu
end sub

Rem Volanie dialógu a makra pre skrytie/odkrytie textu
sub Skry_Odkry_text

 DialogLibraries.LoadLibrary("JP_Skryty_text")
 
 dlg=CreateUnoDialog(DialogLibraries.JP_Skryty_text.Dialog_Skry_Odkry)

 dlg.model.OptionOdkry.State=1 ' Štandardne budeme odkrývať skrytý text
 dlg.model.OptionVymaz.State=0
 dlg.model.Odkry.Label="Odkry"
 
 dlg.model.Check_Preciarkni.State=0 ' Štandardne ponecháme odkrývaný text v pôvodnom tvare
 dlg.model.Check_Podciarkni.State=0
 dlg.model.Check_Text.State=0
 dlg.model.Check_Pozadie.State=0
 
 dlg.model.Oznamovanie.State=1 ' Štandardne budeme oznamovať koniec odkrytia textu
  
 dlg.setVisible(true) ' zviditeľnenie dialógu – namiesto dlg.Execute(), aby sa dalo paralelne pracovať s textom
 while dlg.isVisible() ' Cyklus, ktorý čaká na stlačenie klávesy "Koniec" v dialógu (kým je dialóg viditeľný)
  wait 500 ' Časová medzera 500 milisekúnd (0,5 sec) na to, aby sa dalo paralelne pracovať s dokumentom
 wend
 dlg.dispose() ' Zatvorenie dialógu
end sub


 

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac
Plánovaná údržba v datacentre (20.09.2026) Oznamy
07. 09. 2026

Plánovaná údržba v datacentre (20.09.2026)

Stabilita a nepretržitá dostupnosť vašich webov je pre nás kľúčová. Aby sme tento štandard nielen udržali, ale neustále zvyšovali, naši p...

Čítať viac
Aktualizujte ihneď svoj Wordpress - Kritická zraniteľnosť (CVE-2026-63030) Oznamy
31. 08. 2026

Aktualizujte ihneď svoj Wordpress - Kritická zraniteľnosť (CVE-2026-63030)

Bezpečnostný tím WordPressu vydal núdzovú bezpečnostnú záplatu pre kritickú chybu označenú ako CVE-2026-63030. Táto zraniteľnosť dosiahla...

Čítať viac
Nespíme na vavrínoch, pozrite si našu úrodu nových webov Novinky
01. 07. 2026

Nespíme na vavrínoch, pozrite si našu úrodu nových webov

Prvých šesť mesiacov roka 2026 preverilo našu kreativitu aj technické nasadenie. Naše servery nezaznamenali len nárast prevádzky, ale aj ...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Výborný pomer
cena / výkon

Ponúkame kvalitné a stabilné služby za rozumnú cenu bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies