ΥπηρεσίαSFWidgets.PopupMenu

Η υπηρεσία PopupMenu μπορεί να χρησιμοποιηθεί για τη δημιουργία αναδυόμενων μενού που μπορούν να συσχετιστούν με συμβάντα ή να εκτελεστούν από σενάρια. Αυτή η υπηρεσία παρέχει τις ακόλουθες δυνατότητες:

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

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

note

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

• Τα σενάρια Python απαιτούν εισαγωγή από την ενότητα scriptforge:
από το scriptforge import CreateScriptService


Σε Basic

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


    Sub ShowPopup
        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
        Dim myPopup As Object
        Set myPopup = CreateScriptService("SFWidgets.PopupMenu", , 300, 300)
        myPopup.AddItem("Item ~A")
        myPopup.AddItem("Item ~B")
        vResponse = myPopup.Execute()
        MsgBox("Επιλεγμένο αναγνωριστικό στοιχείου:" & vResponse)
        myPopup.Dispose()
    End Sub
  

Η εκτέλεση του Sub που ορίζεται παραπάνω θα δημιουργήσει ένα αναδυόμενο μενού με δύο καταχωρήσεις στη θέση X=300 και Y=300 στην οθόνη.

tip

Το πρόθεμα SFWidgets μπορεί να καταργηθεί κατά την κλήση της υπηρεσίας PopupMenu.


Το ακόλουθο παράδειγμα ορίζει ένα Sub που μπορεί να συσχετιστεί με ένα συμβάν του ποντικιού:


    Sub MyPopupClick(Optional poMouseEvent as Object)
        Dim myPopup As Object
        Set myPopup = CreateScriptService("PopupMenu", poMouseEvent)
        ' Συμπλήρωση του αναδυόμενου μενού με στοιχεία
        Dim vResponse As Variant
        vResponse = myPopup.Execute(False)
        ' Εκτελέστε κάτι με βάση το vResponse
        ' ...
        myPopup.Dispose()
    End Sub
  
tip

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


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


    Sub MyPopupClick(Optional poEvent as Object)
        Dim myPopup As Object
        Set myPopup = CreateScriptService("PopupMenu", poEvent)
        ' ...
    End Sub
  
Σε Python

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


    from scriptforge import CreateScriptService
    
    def show_popup(args=None):
        my_popup = CreateScriptService("SFWidgets.PopupMenu", None, 300, 300)
        bas = CreateScriptService("Basic")
        my_popup.AddItem("Item ~A")
        my_popup.AddItem("Item ~B")
        response = my_popup.Execute()
        bas.MsgBox(f"Selected item ID: {response}")
        my_popup.Dispose()
  

    def my_popup_click(poEvent=None):
        my_popup = CreateScriptService("SFWidgets.PopupMenu", poEvent)
        # Συμπλήρωση του αναδυόμενου μενού με στοιχεία
        response = my_popup.Execute()
        # Εκτελέστε κάτι με βάση την απόκριση
        my_popup.Dispose()
  

Ιδιότητες

Όνομα

Μόνο για ανάγνωση

Τύπος

Περιγραφή

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
  

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


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

Η συμβολοσειρά --- χρησιμοποιείται για τον ορισμό διαχωριστικών γραμμών σε μενού ή υπομενού.


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

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

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

INSTALLDIR/share/config

tip

Χρησιμοποιήστε την ιδιότητα 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")
    
note

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


Μέθοδοι

Κατάλογος μεθόδων στην υπηρεσία PopupMenu

AddCheckBox
AddItem

AddRadioButton

Execute


AddCheckBox

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

Σύνταξη:

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

Παράμετροι:

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

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

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

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

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

Παράδειγμα:

Σε Basic

      myPopup.AddCheckBox("Option A", Status := True)
    
Σε Python

      my_popup.AddCheckBox("Option A", status=True)
    

AddItem

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

Σύνταξη:

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

Παράμετροι:

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

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

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

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

Παράδειγμα:

Σε Basic

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

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

AddRadioButton

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

Σύνταξη:

svc.AddRadioButton(menuitem: str, opt name: str, opt status: bool = False, opt icon: str, opt tooltip: str): int

Παράμετροι:

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

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

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

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

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

Παράδειγμα:

Σε Basic

      myPopup.AddRadioButton("Option A", Name := "A", Status := True)
    
Σε Python

      my_popup.AddRadioButton("Option A", name="A", status=True)
    

Execute

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

Εάν ο χρήστης πατήσει έξω από το αναδυόμενο μενού ή πατήσει το πλήκτρο Esc, τότε δεν επιλέγεται κανένα στοιχείο. Σε τέτοιες περιπτώσεις, η επιστρεφόμενη τιμή εξαρτάται από την παράμετρο returnid. Αν returnid = True και δεν έχει επιλεγεί κανένα στοιχείο, τότε επιστρέφεται η τιμή 0 (μηδέν). Διαφορετικά, επιστρέφεται μια κενή συμβολοσειρά "".

Σύνταξη:

svc.Execute(opt returnid: bool = True): any

Παράμετροι:

returnid: Εάν True επιστρέφεται το επιλεγμένο αναγνωριστικό στοιχείου. Εάν False η μέθοδος επιστρέφει το όνομα του στοιχείου (Προεπιλογή = True).

Παράδειγμα:

Στα παρακάτω παραδείγματα, δημιουργείται ένα αναδυόμενο μενού και το όνομα του στοιχείου επιστρέφεται επειδή το όρισμα returnid έχει οριστεί σε False.

Σε Basic

      myPopup.AddItem("Item A", Name := "A")
      myPopup.AddItem("Item B", Name := "B")
      Dim vResponse as Variant
      vResponse = myPopup.Execute(False)
    
Σε Python

      my_popup.AddItem("Item A", name="A")
      my_popup.AddItem("Item B", name="B")
      response = my_popup.Execute(False)
    
warning

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


Παρακαλούμε, υποστηρίξτε μας!