Περιεχόμενα

# Υπηρεσία SFWidgets.Menu

Η υπηρεσία Μενού μπορεί να χρησιμοποιηθεί για τη δημιουργία και την αφαίρεση μενού από τη γραμμή μενού ενός παραθύρου εγγράφου του LibreOffice. Κάθε καταχώρηση μενού μπορεί να συσχετιστεί με ένα σενάριο ή με μια εντολή UNO. Αυτή η υπηρεσία παρέχει τις ακόλουθες δυνατότητες:

- Δημιουργία μενού με προσαρμοσμένες καταχωρήσεις, πλαίσια ελέγχου, κουμπιά επιλογής και διαχωριστικά.

- Διακόσμηση στοιχείων μενού με εικονίδια και συμβουλές οθόνης.

Τα μενού που δημιουργούνται με αυτήν την υπηρεσία είναι διαθέσιμα μόνο για ένα καθορισμένο παράθυρο εγγράφου. Δεν αποθηκεύονται στο έγγραφο ή ως ρυθμίσεις εφαρμογής. Το κλείσιμο και το άνοιγμα του εγγράφου θα επαναφέρει τις προεπιλεγμένες ρυθμίσεις της γραμμής μενού.

Όταν τα αντικείμενα OLE, όπως μαθηματικοί τύποι ή γραφήματα Calc επεξεργάζονται μέσα από ένα έγγραφο, το LibreOffice διαμορφώνει εκ νέου τη γραμμή μενού σύμφωνα με το αντικείμενο. Όταν συμβεί αυτό, τα μενού που δημιουργούνται με την υπηρεσία Menu καταργούνται και δεν επαναφέρονται μετά την επεξεργασία του αντικειμένου OLE.

## Κλήση υπηρεσίας

Πριν χρησιμοποιήσετε την υπηρεσία Menu, πρέπει να φορτωθεί ή να εισαχθεί η βιβλιοθήκη ScriptForge:

• Οι μακροεντολές Basic απαιτούν τη φόρτωση της βιβλιοθήκης ScriptForge χρησιμοποιώντας την ακόλουθη πρόταση:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Τα σενάρια Python απαιτούν εισαγωγή από την ενότητα scriptforge:
από το scriptforge import CreateScriptService

##### Σε Basic

Η υπηρεσία Μενού δημιουργείται με την κλήση της μεθόδου CreateMenu από την υπηρεσία Document. Το παρακάτω απόσπασμα κώδικα δημιουργεί ένα μενού με το όνομα My Menu στο τρέχον παράθυρο του εγγράφου με δύο καταχωρήσεις Item A (Στοιχείο A) και Item B (Στοιχείο Β) .

        Sub CreateMenu()
            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            Dim oDoc as Object, oMenu as Object
            Set oDoc = CreateScriptService("Document")
            Set oMenu = oDoc.CreateMenu("My Menu")
            With oMenu
                .AddItem("Item A", Command := "About")
                .AddItem("Item B", Script := "vnd.sun.star.script:Standard.Module1.ItemB_Listener?language=Basic&location=application")
                .Dispose()
            End With
        End Sub

Μετά τη δημιουργία του μενού, συνιστάται να καλέσετε τη μέθοδο Dispose (Απόρριψη) για να ελευθερώσετε τους πόρους που χρησιμοποιούνται από την παρουσία της υπηρεσίας Menu.

Στο παραπάνω παράδειγμα, το Item A (Στοιχείο A) σχετίζεται με την εντολή UNO .uno:About, ενώ το Item B (Στοιχείο B) σχετίζεται με το σενάριο ItemB_Listener που ορίστηκε στο Module1 της βιβλιοθήκης Standard του περιέκτη My Macros (Οι μακροεντολές μου).

Το παρακάτω παράδειγμα ορίζει το ItemB_Listener που θα καλείται όταν πατάτε στο Item B. Αυτός ο ακροατής απλώς χωρίζει τη συμβολοσειρά ορισμάτων που μεταβιβάστηκε στο Sub και τα εμφανίζει σε ένα πλαίσιο μηνύματος.

        Sub ItemB_Listener(args As String)
            ' Επεξεργασία της συμβολοσειράς ορισμάτων που μεταβιβάστηκε στον ακροατή
            Dim sArgs as Object
            sArgs = Split(args, ",")
            MsgBox "Όνομα μενού: "   & sArgs(0) & Chr(13) & _
                   "Στοιχείο μενού: "   & sArgs(1) & Chr(13) & _
                   "Αναγνωριστικό στοιχείου: "     & sArgs(2) & Chr(13) & _
                   "Κατάσταση στοιχείου: " & sArgs(3)
        End Sub

Όπως φαίνεται στο παραπάνω παράδειγμα, οι καταχωρήσεις μενού που σχετίζονται με ένα σενάριο λαμβάνουν ένα όρισμα συμβολοσειράς διαχωρισμένο με κόμμα με τις ακόλουθες τιμές:

- Το όνομα ανωτάτου επιπέδου του μενού.

- Το αναγνωριστικό συμβολοσειράς της επιλεγμένης καταχώρισης μενού.

- Το αριθμητικό αναγνωριστικό της επιλεγμένης καταχώρισης μενού.

- Η τρέχουσα κατάσταση του στοιχείου μενού. Αυτό είναι χρήσιμο για πλαίσια ελέγχου και κουμπιά επιλογής. Εάν το στοιχείο είναι επιλεγμένο, επιστρέφεται η τιμή "1", διαφορετικά επιστρέφεται το "0".

##### Σε Python

Τα παραπάνω παραδείγματα μπορούν να γραφτούν στην Python ως εξής:

        from scriptforge import CreateScriptService

        def create_menu(args=None):
            oDoc = CreateScriptService("Document")
            oMenu = oDoc.CreateMenu("My Menu")
            oMenu.AddItem("Item A", command="About")
            oMenu.AddItem("Item B", script="vnd.sun.star.script:my_macros.py$item_b_listener?language=Python&location=user")
            oMenu.Dispose()

        def item_b_listener(args):
            bas = CreateScriptService("Basic")
            s_args = args.split(",")
            msg = f"Όνομα του μενού: {s_args[0]}\n"
            msg += f"Στοιχείο του μενού: {s_args[1]}\n"
            msg += f"Αναγνωριστικό του μενού: {s_args[2]}\n"
            msg += f"Κατάσταση του στοιχείου: {s_args[3]}"
            bas.MsgBox(msg)

## Ιδιότητες

Όνομα | Μόνο για ανάγνωση | Τύπος | Περιγραφή
--- | --- | --- | ---
ShortcutCharacter | Όχι | String | Ο χαρακτήρας που χρησιμοποιείται για τον καθορισμό του κλειδιού πρόσβασης ενός στοιχείου μενού. Ο προεπιλεγμένος χαρακτήρας είναι "~".
SubmenuCharacter | Όχι | String | Ο χαρακτήρας ή η συμβολοσειρά που καθορίζει τον τρόπο ένθεσης των στοιχείων μενού. Ο προεπιλεγμένος χαρακτήρας είναι ">".

## Μενού και υπομενού

Για να δημιουργήσετε ένα μενού με υπομενού, χρησιμοποιήστε τον χαρακτήρα που ορίστηκε στην ιδιότητα SubmenuCharacter, ενώ δημιουργείτε την καταχώρηση μενού για να ορίσετε πού θα τοποθετηθεί. Για παράδειγμα, εξετάστε την ακόλουθη ιεραρχία μενού/υπομενού.

        ' Item A
        ' Item B > Item B.1
        '          Item B.2
        ' ------ (line separator)
        ' Item C > Item C.1 > Item C.1.1
        '                     Item C.1.2
        ' Item C > Item C.2 > Item C.2.1
        '                     Item C.2.2
        '                     ------ (line separator)
        '                     Item C.2.3
        '                     Item C.2.4

Ο παρακάτω κώδικας χρησιμοποιεί τον προεπιλεγμένο χαρακτήρα υπομενού ">" για να δημιουργήσει την ιεραρχία μενού/υπομενού που ορίζεται παραπάνω:

        oMenu.AddItem("Item A")
        oMenu.AddItem("Item B>Item B.1")
        oMenu.AddItem("Item B>Item B.2")
        oMenu.AddItem("---")
        oMenu.AddItem("Item C>Item C.1>Item C.1.1")
        oMenu.AddItem("Item C>Item C.1>Item C.1.2")
        oMenu.AddItem("Item C>Item C.2>Item C.2.1")
        oMenu.AddItem("Item C>Item C.2>Item C.2.2")
        oMenu.AddItem("Item C>Item C.2>---")
        oMenu.AddItem("Item C>Item C.2>Item C.2.3")
        oMenu.AddItem("Item C>Item C.2>Item C.2.4")

The string --- is used to define separator lines in menus or submenus.

### Χρήση εικονιδίων

Τα στοιχεία στο μενού μπορούν να έχουν εικονίδια, τα οποία καθορίζονται ως ορίσματα στις μεθόδους AddCheckBox, AddItem και AddRadioButton.

Όλα τα εικονίδια που είναι διαθέσιμα στο LibreOffice μπορούν να χρησιμοποιηθούν καθορίζοντας τη διαδρομή τους σε σχέση με το φάκελο όπου βρίσκονται τα αρχεία εικονιδίων στο φάκελο εγκατάστασης. Τα εικονίδια βρίσκονται στον ακόλουθο φάκελο:

INSTALLDIR/share/config

Χρησιμοποιήστε την ιδιότητα InstallFolder της υπηρεσίας FileSystem για να προσδιορίσετε πού είναι εγκατεστημένο το LibreOffice στο σύστημά σας.

Αυτός ο φάκελος περιέχει μια σειρά από αρχεία ZIP που περιέχουν τα αρχεία εικόνας κάθε διαθέσιμου συνόλου εικονιδίων. Οι εικόνες μέσα σε αυτά τα αρχεία ZIP είναι οργανωμένες σε φακέλους. Για να χρησιμοποιήσετε ένα εικονίδιο, καθορίστε το αρχείο εικονιδίου με τη διαδρομή προς τη θέση του μέσα στο αρχείο ZIP.

Το παρακάτω παράδειγμα χρησιμοποιεί το εικονίδιο "sc_newdoc.svg" που βρίσκεται μέσα στο φάκελο "cmd". Ο χαρακτήρας "/" χρησιμοποιείται ως διαχωριστικό διαδρομής ανεξάρτητα από το λειτουργικό σύστημα.

##### Σε Basic

          myMenu.AddItem("Item A", Icon := "cmd/sc_newdoc.svg")

##### Σε Python

          myMenu.AddItem("Item A", icon="cmd/sc_newdoc.svg")

Όλα τα σύνολα εικονιδίων έχουν την ίδια εσωτερική δομή. Το ενεργό εικονίδιο που εμφανίζεται εξαρτάται από το σύνολο εικονιδίων που χρησιμοποιείται.

## Μέθοδοι

Κατάλογος μεθόδων στην υπηρεσία μενού
AddCheckBox | AddItem | AddRadioButton

## AddCheckBox

Εισάγει ένα πλαίσιο ελέγχου στο μενού. Επιστρέφει μια ακέραιη τιμή που προσδιορίζει το στοιχείο που έχει εισαχθεί.

### Σύνταξη:

svc.AddCheckBox(menuitem: str, opt name: str, opt status: bool, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Παράμετροι:

menuitem: (στοιχείο μενού:) Καθορίζει το κείμενο που θα εμφανίζεται στο μενού. Αυτό το όρισμα ορίζει επίσης την ιεραρχία του στοιχείου μέσα στο μενού χρησιμοποιώντας τον χαρακτήρα του υπομενού.

name: (όνομα:) Η τιμή της συμβολοσειράς που χρησιμοποιείται για τον προσδιορισμό του στοιχείου μενού. Από προεπιλογή, χρησιμοποιείται το τελευταίο στοιχείο της ιεραρχίας του μενού.

status: (κατάσταση:) Καθορίζει εάν το στοιχείο επιλέγεται κατά τη δημιουργία του μενού (Προεπιλογή = False).

icon: (εικονίδιο:) Η διαδρομή και το όνομα του εικονιδίου που θα εμφανιστεί χωρίς το αρχικό διαχωριστικό της διαδρομής. Το πραγματικό εικονίδιο που εμφανίζεται εξαρτάται από το χρησιμοποιούμενο σύνολο των εικονιδίων.

tooltip: Το κείμενο που θα εμφανίζεται ως επεξήγηση εργαλείου.

command: (εντολή:) Το όνομα μιας εντολής UNO χωρίς το πρόθεμα .uno:. Εάν το όνομα της εντολής δεν υπάρχει, δεν συμβαίνει τίποτα.

script: Το URI για ένα σενάριο Basic ή Python που θα εκτελεστεί όταν πατηθεί το στοιχείο.

Τα ορίσματα command και script είναι αμοιβαία αποκλειόμενα, επομένως μόνο ένα από αυτά μπορεί να οριστεί για κάθε στοιχείο μενού.

Διαβάστε τις Προδιαγραφές URI πλαισίου σεναρίου για να μάθετε περισσότερα σχετικά με τη σύνταξη URI που χρησιμοποιείται στο script.

### Παράδειγμα:

##### Σε Basic

          ' Καταχώρηση μενού που σχετίζεται με την εντολή .uno:Paste
          oMenu.AddCheckBox("Item A", Status := True, ToolTip := "Paste values", Command := "Paste")
          Εκτελεί το σενάριο της Basic Standard.Module1.MyListener που είναι αποθηκευμένο στο έγγραφο
          oMenu.AddCheckBox("Item B", Status := False, Script := "vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          ' Εκτελεί το σενάριο της Python MyListener που βρίσκεται στο αρχείο myScripts.py στον φάκελο scripts του χρήστη
          oMenu.AddCheckBox("Item C", Status := True, Script := "vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

##### Σε Python

          oMenu.AddCheckBox("Item A", status=True, tooltip="Paste values", command="Paste")
          oMenu.AddCheckBox("Item B", status=False, script="vnd.sun.star.script:Standard.Module1.MyListener?language=Basic&location=document")
          oMenu.AddCheckBox("Item C", Status=True, Script="vnd.sun.star.script:myScripts.py$MyListener?language=Python&location=user")

## AddItem

Εισάγει μια καταχώρηση ετικέτας στο μενού. Επιστρέφει μια ακέραια τιμή που προσδιορίζει το εισαγόμενο στοιχείο.

### Σύνταξη:

svc.AddItem(menuitem: str, opt name: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Παράμετροι:

menuitem: (στοιχείο μενού:) Καθορίζει το κείμενο που θα εμφανίζεται στο μενού. Αυτό το όρισμα ορίζει επίσης την ιεραρχία του στοιχείου μέσα στο μενού χρησιμοποιώντας τον χαρακτήρα του υπομενού.

name: (όνομα:) Τιμή συμβολοσειράς που θα επιστραφεί όταν πατηθεί το στοιχείο. Από προεπιλογή, χρησιμοποιείται το τελευταίο στοιχείο της ιεραρχίας του μενού.

icon: (εικονίδιο:) Η διαδρομή και το όνομα του εικονιδίου που θα εμφανιστεί χωρίς το αρχικό διαχωριστικό της διαδρομής. Το πραγματικό εικονίδιο που εμφανίζεται εξαρτάται από το χρησιμοποιούμενο σύνολο των εικονιδίων.

tooltip: Το κείμενο που θα εμφανίζεται ως επεξήγηση εργαλείου.

command: (εντολή:) Το όνομα μιας εντολής UNO χωρίς το πρόθεμα .uno:. Εάν το όνομα της εντολής δεν υπάρχει, δεν συμβαίνει τίποτα.

script: Το URI για ένα σενάριο Basic ή Python που θα εκτελεστεί όταν πατηθεί το στοιχείο.

Τα ορίσματα command και script είναι αμοιβαία αποκλειόμενα, επομένως μόνο ένα από αυτά μπορεί να οριστεί για κάθε στοιχείο μενού.

Διαβάστε τις Προδιαγραφές URI πλαισίου σεναρίου για να μάθετε περισσότερα σχετικά με τη σύνταξη URI που χρησιμοποιείται στο script.

### Παράδειγμα:

##### Σε Basic

          oMenu.AddItem("Στοιχείο A", Tooltip := "Ένα περιγραφικό μήνυμα")

##### Σε Python

          oMenu.AddItem ("Στοιχείο Α", tooltip = "Περιγραφικό μήνυμα")

## AddRadioButton

Εισάγει μια καταχώρηση κουμπιού επιλογής στο μενού. Επιστρέφει μια ακέραια τιμή που προσδιορίζει το στοιχείο που έχει εισαχθεί.

### Σύνταξη:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: str, opt icon: str, opt tooltip: str, opt command: str, opt script: str): int

### Παράμετροι:

menuitem: (στοιχείο μενού:) Καθορίζει το κείμενο που θα εμφανίζεται στο μενού. Αυτό το όρισμα ορίζει επίσης την ιεραρχία του στοιχείου μέσα στο μενού χρησιμοποιώντας τον χαρακτήρα του υπομενού.

name: (όνομα:) Τιμή συμβολοσειράς που θα επιστραφεί όταν πατηθεί το στοιχείο. Από προεπιλογή, χρησιμοποιείται το τελευταίο στοιχείο της ιεραρχίας του μενού.

status: (κατάσταση:) Καθορίζει εάν το στοιχείο επιλέγεται κατά τη δημιουργία του μενού (Προεπιλογή = False).

icon: (εικονίδιο:) Η διαδρομή και το όνομα του εικονιδίου που θα εμφανιστεί χωρίς το αρχικό διαχωριστικό της διαδρομής. Το πραγματικό εικονίδιο που εμφανίζεται εξαρτάται από το χρησιμοποιούμενο σύνολο των εικονιδίων.

tooltip: Το κείμενο που θα εμφανίζεται ως επεξήγηση εργαλείου.

command: (εντολή:) Το όνομα μιας εντολής UNO χωρίς το πρόθεμα .uno:. Εάν το όνομα της εντολής δεν υπάρχει, δεν συμβαίνει τίποτα.

script: Το URI για ένα σενάριο Basic ή Python που θα εκτελεστεί όταν πατηθεί το στοιχείο.

Τα ορίσματα command και script είναι αμοιβαία αποκλειόμενα, επομένως μόνο ένα από αυτά μπορεί να οριστεί για κάθε στοιχείο μενού.

Διαβάστε τις Προδιαγραφές URI πλαισίου σεναρίου για να μάθετε περισσότερα σχετικά με τη σύνταξη URI που χρησιμοποιείται στο script.

### Παράδειγμα:

##### Σε Basic

          oMenu.AddRadioButton("Item A", Name := "A", Status := True)

##### Σε Python

          oMenu.AddRadioButton("Item A", name="A", status=True)

Όλες οι ρουτίνες ή αναγνωριστικά του ScriptForge στη Basic που έχουν το πρόθεμα χαρακτήρα υπογράμμισης "_" δεσμεύονται για εσωτερική χρήση. Δεν προορίζονται να χρησιμοποιηθούν σε μακροεντολές Basic ή σενάρια Python.

Σχετικά θέματα

ΥπηρεσίαSFWidgets.PopupMenu

Υπηρεσία SFDocuments.Document