Preskočiť menu

Aligátor, Fórum, Pripojsa.sk, Servis, Speedmeter, Webhosting, Weblogy.sk
banner HP

Číta nás cez 130 tisíc ľudí | Autori | O Inet.sk | OZ IPV | Referáty | Reklama | RSS

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

17. 2. 2010, Programovanie, Július Pastierik, 0 komentárov

Potrebujete opticky vidieť, koľko bude vaše makro ešte asi pracovať? Zobrazte si priebeh jeho 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


 

Podobné články na Inet.sk

Diskusia k článku

Dátum Meno Predmet
Prejsť na diskusiu | Pridať komentár
Diskusia momentálne neobsahuje žiadne komentáre

Vyhľadávanie

Platená reklama

Textová reklama

notebook.pda.sk
E-shop zameraný na predaj mobilných zariadení. Hlavnou ponukou sú notebooky značky Apple, DELL a príslušenstvo.

EuroPhoto : Bratislava Photo | Vienna Photo | Prague Photo | London Photo | Paris Photo
Croatia | Bratislava Property
PROMA nábytok: najväčšia výroba: kuchynské linky, kuchyne a kuchynský nábytok. Pracovné dosky, úchytky, grafický 3D dizajn.

MSkozmetika: internetový predaj parfémov, kozmetiky a bižutérie. Mega parfuméria na webe. Značková a luxusná kozmetika.

Newsletter


Inet.sk – Internetový denník, ISSN 1336-1899
Copyright 2002 – 2010 Inet.sk, s. r. o., Všetky práva vyhradené, Neprešlo jazykovou úpravou

Partneri:
123velkoformatovatlac.sk Aaavizitky.sk Bilancia skrývky BiznisHosting.sk CinemaView.sk Digitálne fotoaparáty Digitlac.sk Fotografie Grafika.sk HrajSa.sk Katalog Pozri.sk Kusi.sk Manga.sk Notebooky HP Predaj PC komponenty Reality Aaainfo.sk Reklama.sk Sladká kytica StiahniTo.sk Surf.sk Toshiba PC akcia Úvery Aaainfo.sk Zájazdy