Περιεχόμενα

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

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

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

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

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

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

• Οι μακροεντολές 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 στην οθόνη.

Το πρόθεμα 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

Χρησιμοποιήστε τη μέθοδο 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")

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

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

Τα στοιχεία στο μενού μπορούν να έχουν εικονίδια, τα οποία καθορίζονται ως ορίσματα στις μεθόδους 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")

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

## Μέθοδοι

Κατάλογος μεθόδων στην υπηρεσία 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)

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

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

SFDialogs. Υπηρεσία Διάλογος

Υπηρεσία SFDialogs.DialogControl

Υπηρεσία SFWidgets.Menu

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