Tjenesten ScriptForge.UI (brugerflade)

Tjenesten UI (User Interface = brugerflade) forenkler identifikationen og håndteringen af de forskellige vinduer, der udgør hele LibreOffice-programet.

tip

Tjenesten UI er startpunktet til åbning af, oprettelse af og tilgang til indholdet i nye eller eksisterende dokumenter fra et bruger-script.


Definitioner

WindowName

Et vindue kan udpeges på forskellige måder:

Vinduets navn bruger både Store og små bogstaver.

Objektet Document

Metoderne CreateDocument (Opret_dokument), CreateBaseDocument (Opret_basedokument), GetDocument (Hent_dokument), OpenBaseDocument (Åbn_basedokument) og OpenDocument (Åbn_dokument), beskrevet nedenfor, genererere dokumentobjekter. Når et vindue indeholder et dokument, repræsenterer en forekomst af klassen Document dette dokument. Et modeksempel: Basic IDEen er ikke et dokument men et vindue i vor terminologi. Derudover har et dokument en type: Calc, Impress, Writer, ...

De specifikke egenskaber og metoder, der kan anvendes på dokumenter er implementeret i en dokument-klasse.

tip

Implementeringen af objektklassen document udføres i det tilknyttede bibliotek SFDocuments. Se dets tjeneste "Document" (dokument).


Kald af tjeneste

Før brug af tjenesten UI skal biblioteket ScriptForge være indlæst eller importeret:

note

• Basic-makroer kræver, at biblioteket ScriptForge indlæses med følgende udtryk:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python-scripts kræver import af scriptforge-modulet:
from scriptforge import CreateScriptService


I Basic

    Dim ui As Variant
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Set ui = CreateScriptService("UI")
  
I Python

    from scriptforge import CreateScriptService
    ui = CreateScriptService("UI")
  

Egenskaber

Navn

Skrivebeskyttet

Type

Beskrivelse

ActiveWindow

Ja

String

et gyldigt og unikt WindowName (vinduesnavn) til det aktuelt aktive vindue. Når vinduet ikke kan identificeres, returneres en nul-længde streng.

Documents

Ja

String array

Listen over aktuelt åbne dokumenter. Specialvinduer ignoreres. Denne liste består af en nul-baseret en-dimensionel matrix af enten filnavne (i SF_FileSystem.FileNaming-notation) eller af titler på ikke-gemte dokumenter.

Height

Yes

Integer

Returns the height of the active window in pixels.

Width

Yes

Integer

Returns the width of the active window in pixels.

X

Yes

Integer

Returns the X coordinate of the active window, which is the distance to the left edge of the screen in pixels.

Y

Yes

Integer

Returns the Y coordinate of the active window, which is the distance to the top edge of the screen in pixels. This value does not consider window decorations added by your operating system, so even when the window is maximized this value may not be zero.


Konstanter

Navn

Værdi

Beskrivelse

MACROEXECALWAYS

2

Makroer udføres altid

MACROEXECNEVER

1

Makroer udføres aldrig

MACROEXECNORMAL

0

Makro-udførelse afhænger af brugerindstillinger


Eksempel:

Eksemplet herunder viser et MsgBox (Beskedfelt) med navnene på alle aktuelt åbne dokumenter.

I Basic

      Dim openDocs as Object, strDocs as String
     Set openDocs = ui.Documents()
     strDocs = openDocs(0)
     For i = 1 to UBound(openDocs)
         strDocs = strDocs & Chr(10) & openDocs(i)
     Next i
     MsgBox strDocs
   
I Python

     ui = CreateScriptService("UI")
     bas = CreateScriptService("Basic")
     openDocs = ui.Documents()
     strDocs = "\n".join(openDocs)
     bas.MsgBox(strDocs)
   

Liste over metoder i tjenesten UI (brugerflade)

Activate
CreateBaseDocument
CreateDocument (*)
GetDocument
Maximize

Minimize
OpenBaseDocument
OpenDocument (*)
Resize

RunCommand
SetStatusBar (*)
ShowProgressBar
WindowExists


warning

Bemærk undtagelsesvis, at metoder, der er mærket med (*), ikke kan anvendes i Base-dokumenter.


Activate

Gør det bestemte vindue aktivt. Metoden returnerer True (sand), hvis det givne vindue bliver fundet og kan aktiveres. Der er ikke nogen ændring i den aktuelle brugerflade, vis intet vindue matcher udvælgelsen.

Syntaks:

svc.Activate(windowname: str): bool

Parametre:

vinduesnavn: se definitionerne ovenfor.

Eksempel:

I Basic

      ui.Activate("C:\Documents\My file.odt")
    
I Python

      ui.Activate(r"C:\Documents\My file.odt")
    

CreateBaseDocument

Opretter og gemmer et nyt LibreOffice Base-dokument, der indlejrer en tom datafbase af den givne type. Metoder returnerer en forekomst af tjenesten Document.

Syntaks:

svc.CreateBaseDocument(filename: str, embeddeddatabase: str = 'HSQLDB', registrationname: str = '', opt calcfilename: str): svc

Parametre:

filnavn: Identificerer swn fil, der skal oprettes. Den skal følge SF_FileSystem.FileNaming notationen. Hvis filen allerede eksisterer, overskrives den uden advarsel.

Indlejret_database: Enten "HSQLDB" (standard), "FIREBIRD" eller "CALC".

registreringsnavn: Navnett, der bruges til at gemme den nye database i databasens register. Ved = "" (standard), sker der ingen registrering. Hvis navnet allerede eksisterer, overskrives det uden advarsel.

calc-filnavn : Kun når embeddeddatabase (indlejret_database) = "CALC", repræsenterer calcfilename filen , der indeholder tabellerne, som Calc-regneark. Filen skal findes, eller sættes der et fejlflag.

Eksempel:

I Basic

      Dim myBase As Object, myCalcBase As Object
      Set myBase = ui.CreateBaseDocument("C:\Databases\MyBaseFile.odb", "FIREBIRD")
      Set myCalcBase = ui.CreateBaseDocument("C:\Databases\MyCalcBaseFile.odb", _
          "CALC", , "C:\Databases\MyCalcFile.ods")
   
I Python

     myBase = ui.CreateBaseDocument(r"C:\Databases\MyBaseFile.odb", "FIREBIRD")
     myCalcBase = ui.CreateBaseDocument(r"C:\Databases\MyCalcBaseFile.odb", \
         "CALC", calcfilename = r"C:\Databases\MyCalcFile.ods")
   

CreateDocument (*)

Opret et nyt LibreOffice-dokument af en given type eller baseret på en given skabelon. Metoden returnerer et dokumentobjekt.

Syntaks:

svc.CreateDocument(documenttype: str = '', templatefile: str = '', hidden: bool = False): svc

Parametre:

dokumenttype : "Calc", "Writer", osv. Hvis den mangler, skal argumentet templatefile (skabelonfil) være tilstede.

skabelonfil: Det fulde FileName (filnavn) på den skabelon, det nye dokument skal bygges på. Hvis filen ikke eksisterer, ignoreres argumentet. Tjenesten FileSystem (filsystem) service sørger for egenskaberne TemplatesFolder (Skabelonmappe) og UserTemplatesFolder (Bruger_skabelonmappe), der hjælper med at bygge argumentet.

skjult: hvis True (sand), åbner du det nye dokument i baggrunden (standard = False (falsk)). Skal bruges med forsigtighed: aktivering eller lukning senere hen kan kun ske fra programmet.

Eksempel:

I begge ekseempler herunder opretter det første kald af metoden CreateDocument wet tomt Calc-dokument, mens det andet opretter et dokument fra en skabelonfil.

I Basic

      Dim myDoc1 As Object, myDoc2 As Object, FSO As Object
      Set myDoc1 = ui.CreateDocument("Calc")
      Set FSO = CreateScriptService("FileSystem")
      Set myDoc2 = ui.CreateDocument(, FSO.BuildPath(FSO.TemplatesFolder, "personal/CV.ott"))
   
I Python

     myDoc1 = ui.CreateDocument("Calc")
     fs = CreateScriptService("FileSystem")
     myDoc2 = ui.CreateDocument(templatefile = fs.BuildPath(fs.TemplatesFolder, "personal/CV.ott"))
   

GetDocument

Returnerer et åbent dokumentobjekt, der refererer til enten det aktive vindue, et givet vindue eller det aktive dokument.

Syntaks:

svc.GetDocument(windowname: str = ''): svc

svc.GetDocument(windowname: uno): svc

Parametre:

windowname (vinduenavn): Se definitionerne ovenfor. Hvis dette argument mangler, bruges det aktive vindue. UNO-objekter af typerne com.sun.star.lang.XComponent eller com.sun.star.comp.dba.ODatabaseDocument accepteres også. På denne måde opretter videregivelse af ThisComponent (denne_komponent) eller ThisDatabaseDocument (dette_database-dokument) som argument et nyt SFDocuments.Document (SF-dokumenter.dokument), en ny Base (database) eller en ny Calc service (Calc-tjeneste).

Eksempel:

I Basic

      Dim myDoc As Object
      Set myDoc = ui.GetDocument("C:\Documents\My file.odt")
      Set myBase = ui.GetDocument(ThisDatabaseDocument)
   
I Python

     from scriptforge import CreateScriptService
     bas = CreateScriptService("Basic")
     myDoc = ui.GetDocument(r"C:\Documents\My file.odt")
     myDoc = ui.GetDocument(bas.ThisComponent)
   
tip

For at tilgå navnet på det aktuelt aktive vindue, henviser du til egenskaben ActiveWindow.


Maximize

Maksimerer det aktive vindue eller det givne vindue.

Syntaks:

svc.Maximize(windowname: str)

Parametre:

vinduesnavn: se definitionerne ovenfor. Hvis dette argument mangler, maksimeres det aktive vindue.

Eksempel:

I Basic

      ui.Maximize("Untitled 1")
   
I Python

     ui.Maximize("Untitled 1")
   

Minimize

Minimerer det aktive vindue eller det givne vindue.

Syntaks:

svc.Minimize(windowname: str)

Parametre:

vinduesnavn: se definitionerne ovenfor. Hvis dette argument mangler, minimeres det aktive vindue.

Eksempel:

I Basic

     ui.Minimize()
   
I Python

     ui.Minimize()
   

OpenBaseDocument

Åbn et eksisterende LibreOffice Base-dokument. Metoden returnerer et dokument-objekt.

Syntaks:

svc.OpenBaseDocument(filename: str = '', registrationname: str = '', macroexecution: int = 0): svc

Parametre:

filnavn: Identificerer filen, der skal åbnes. Det skal følge notationen SF_FileSystem.FileNaming.

registreringsnavn: Navnet, der bruges til at finde databasen i databaseregistret. Det ignoreres, hvis FileName <> "".

makro-udførelse: 0 = adfærd er defineret af brugerkonfigurationen, 1 = makroer kan ikke udføres, 2 = makroer kan udføres.

Eksempel:

I Basic

      Dim myBase As Object
      Set myBase = ui.OpenBaseDocument("C:\Documents\myDB.odb", MacroExecution := ui.MACROEXECALWAYS)
   
I Python

     ui.OpenBaseDocument(r"C:\Documents\myDB.odb", macroexecution = ui.MACROEXECALWAYS)
   
tip

To improve code readability you can use predefined constants for the macroexecution argument, as in the examples above.


OpenDocument (*)

Opens an existing LibreOffice document with the given options. Returns a document object or one of its subclasses. The method returns Nothing (in BASIC) or None (in Python) if the opening failed, even when the failure is caused by a user decision.

Syntaks:

svc.Opendocument(filename: str, password: str = '', readonly: bool = False, hidden: bool = False, macroexecution: int = 0, filtername: str = '', filteroptions: str = ''): svc

Parametre:

filnavn: Identificerer filen, der skal åbnes. Det skal følge FileNaming-notation i tjenesten FileSystem .

adgangskode: Til brug, når dokumentet er beskyttet. Hvis den er forkert eller mangler, når dokumentet er beskyttet, bliver brugeren bedt om at indtaste en adgangskode.

skrivebeskyttet: Standard = False (falsk).

skjult: hvis True (sand), åbner du dokumentet i baggrunden (standard = False (falsk)). Bør bruges med forsigtighed: aktivering eller lukning kan kun ske fra programmet.

makro-udførelse: 0 =adfærd er defineret af brugerkonfiguration, 1 = makroer kan ikke udføres, 2 = makroer kan udføres.

filternavn: Navnet på et filter, der skal bruges til at indlæse dokumentet. Hvis det findes, skal filtret findes.

filter-indstillinger: En valgfri indstillings-streng, der er associeret med filteret.

Eksempel:

I Basic

      Dim myDoc As Object, FSO As Object
      Set myDoc = ui.OpenDocument("C:\Documents\myFile.odt", ReadOnly := True)
   
I Python

     ui.OpenDocument(r"C:\Documents\myFile.odt", readonly = True)
   

Resize

Ændrer størrelse på og/eller flytter det aktive vindue. Manglende og negative argumenter ignoreres. Hvis vinduet er minimeret eller maksimeret, gendanner kald af Resize (Juster størrelse) uden argumenter det.

Syntaks:

svc.Resize(left: int = -1, top: int = -1, width: int = -1, height: int = -1)

Parametre:

venstre, øverst: Afstande fra det øverste-venstre hjørne fra den øverste og den venstre kan af skærmen i pixler.

bredde, højde: Vinduets nye dimensioner i pixler.

Eksempel:

I de følgende de følgende eksempler ændres vinduets width (bredde) og height (højde), mens top (øverst) og left (venstre) efterlades uændrede.

I Basic

      ui.Resize(, ,500, 500)
   
I Python

     ui.Resize(width = 500, height = 500)
   
tip

For at ændre størrelse på et vindue, der ikke er aktivt, aktiverer du det først med metoden Activate (Aktiver).


RunCommand

Kører en UNO-kommando i det aktuelle vindue. Nogle få typiske kommandoer er: Gem, Gem som, Eksporter til PDF, Fortryd, Kopier, Indsæt og så videre.

Kommandoer kan køres med eller uden argumenter. Argumenter valideres ikke, før kommandoen køres. Hvis kommandoen eller dens argumenter er ugyldige, sker der intet.

tip

Se en komplet liste over UNO-kommandoer, der kan køres i LibreOffice på Wikisiden Udvikling/Forsendelseskommandoer.


Syntaks:

svc.RunCommand(command: str, [args: any])

Parametre:

kommando: Streng med Stort-og-småt, der indeholder UNO-kommandoens navn. Medtagelse af forstavelsen ".uno:" i kommandoen er valgfri. Selve kommandoen tjekkes ikke for korrekthed. Hvis der ikke sker noget efter kommandokaldet, er kommandoen er sandsynligvis forkert.

args: For hvert argument, der skal videregives til kommandoen, angiver du et par, der indeholder argumentets navn og værdi.

Eksempel:

I Basic

Det følgende eksempel kører kommandoen .uno:About i det aktuelle vindue.


    Set ui = CreateScriptService("UI")
    ui.RunCommand("About")
  

Herunder er der et eksempel, der kører UNO-kommandoen .uno:BasicIDEAppear og videregiver de argumenter, der er nødvendige for at åbne Basic IDEet på en angiven linje i modulet.


    ' Argumenter videregivet til kommandoen:
    ' Document  = "LibreOffice Macros & Dialogs"
    ' LibName = "ScriptForge"
    ' Name = "SF_Session"
    ' Line = 600
    ui.RunCommand(".uno:BasicIDEAppear", "Document", "LibreOffice Macros & Dialogs", _ 
                  "LibName", "ScriptForge", "Name", "SF_Session", "Line", 600)
  

Bemærk, at kald af kommandoen BasicIDEAppear uden argumenter kun åbner Basic IDEen.

I Python

    ui = CreateScriptService("UI")
    ui.RunCommand("About")
  

    ui.RunCommand(".uno:BasicIDEAppear", "Document", "LibreOffice Macros & Dialogs", \
                  "LibName", "ScriptForge", "Name", "SF_Session", "Line", 600)
  

I Python er det også muligt at kaæde RunCommand (kør_kommando) med nøgleordsargumenter:


    ui.RunCommand(".uno:BasicIDEAppear", Document = "LibreOffice Macros & Dialogs", \
                  LibName = "ScriptForge", Name = "SF_Session", Line = 600)
  
tip

Hver LibreOffice-komponent har sit eget sæt af tilgængelige kommandoer. En nem måde at lære kommandoer på er at gå til Funktioner - Tilpas - Tastatur. Når du placerer musen over en funktion på listen Funktion, vises et værtøjstip med den tilsvarende UNO-kommando.


SetStatusbar (*)

Vis en tekst og en fremdriftslinje i det aktive vindues statuslinje. Ethvert efterfølgende kald i den samme makrokørsel refererer til den samme statuslinje i det samme vindue, også selv om vinduet ikke mere er synligt. Et kald uden argumenter nulstiller statuslinjen til dens normale tilstand.

Syntaks:

svc.SetStatusbar(text: str = '', percentage: int = -1)

Parametre:

tekst: En valgfri tekst, der skal vises foran statuslinjen.

procentdel: en valgfri fremskrifts-procentdel mellem 0 og 100.

Eksempel:

I Basic

      Dim i As Integer
      For i = 0 To 100
          ui.SetStatusbar("Progress ...", i)
          Wait 50
      Next i
      ' Nulstiller statuslinjen
      ui.SetStatusbar
   
I Python

     from time import sleep
     for i in range(101):
         ui.SetStatusbar("Test:", i)
         sleep(0.05)
     ui.SetStatusbar()
   

ShowProgressBar

Viser et ikke-modalt dialogfelt. Angiver dets titel, en forklarende tekst og en fremskridts-procentdel, der skal præsentereres på en statuslinje. Dialogen forbliver synlig, indtil et kald af metoden uden argumenter eller indtil brugeren manuelt lukker dialogen.

Syntaks:

svc.ShowProgressBar(title: str = '', text: str = '', percentage: str = -1)

Parametre:

titel: Titlen, der visves øverst i dialogfeltet. Standard = "ScriptForge".

tekst: En valgfri tekst, der skal vises over statuslinjen.

peocentdel: en valgfri grad af fremskrift mellem 0 og 100.

Eksempel:

I Basic

      Dim i As Integer
      For i = 0 To 100
          ui.ShowProgressBar("Window Title", "Progress ..." & i & "/100", i)
          Wait 50
      Next i
      ' Lukker vinduet Statuslinje
      ui.ShowProgressBar
   
I Python

     from time import sleep
     for i in range(101):
         ui.ShowProgressBar("Window Title", "Progress ... " + str(i) + "/100", i)
         sleep(0.05)
     # Lukker vinduet Statuslinje
     ui.ShowProgressBar()
   

WindowExists

Returnerer True (sand), hvis det givne vindue kunne identificeres.

Syntaks:

svc.WindowExists(windowname: str): bool

Parametre:

vinduesnavn: se definitionerne herover.

Eksempel:

I Basic

      If ui.WindowExists("C:\Document\My file.odt") Then
          ' ...
   
I Python

     if ui.WindowExists(r"C:\Document\My file.odt"):
         # ...
   

Støt os venligst!