DEFINE POPUP-Befehl

Erstellt ein Menü.

DEFINE POPUP MenuName [FROM nRow1, nColumn1] [TO nRow2, nColumn2]
   [IN [WINDOW] WindowName | IN SCREEN] [FONT cFontName [, nFontSize]]
   [STYLE cFontStyle] [FOOTER cFooterText] [KEY KeyLabel] [MARGIN]
   [MARK cMarkCharacter] [MESSAGE cMessageText] [MOVER] [MULTISELECT] 
   [PROMPT FIELD FieldName | PROMPT FILES [LIKE FileSkeleton] 
      | PROMPT STRUCTURE] [RELATIVE] [SCROLL] [SHORTCUT]
   [TITLE cMenuTitleText] 
   [COLOR SCHEME nSchemeNumber | COLOR ColorPairList]

Parameter

  • MenuName
    Gibt den Namen des zu erstellenden Menüs an.

  • FROM nRow1, nColumn1 TO nRow2, nColumn2
    Gibt die Position des Menüs an. nRow1, nColumn1 sind die Koordinaten der oberen linken Ecke des Menüs. Wird die FROM-Klausel nicht angegeben, setzt Visual FoxPro die obere linke Ecke des Menüs in die erste Zeile und die erste Spalte des Visual FoxPro-Hauptfensters oder eines benutzerdefinierten Fensters.

    Um ein Menü mit einer bestimmten Größe zu erstellen, können Sie zur Angabe der unteren rechten Ecke des Menüs ebenfalls TO nRow2, nColumn2 einbeziehen. Wenn Sie nur FROM nRow1, nColumn1, nicht aber TO nRow2, nColumn2 einbeziehen, legt Visual FoxPro die Größe des Menüs automatisch fest. Das Menü ist dann so breit wie das längste Menüelement (sofern die Elemente mit DEFINE BAR erstellt wurden) und so lang, dass alle Menüelemente angezeigt werden. Die Länge des Menüs wird durch die Größe des Visual FoxPro-Hauptfensters oder des benutzerdefinierten Fensters, in das das Menü gestellt wird, eingeschränkt. Ist ein Menü nicht lang genug und es können nicht alle Menüelemente angezeigt werden, wird eine Bildlaufleiste angezeigt, so dass Sie einen Bildlauf durch die Menüelemente ausführen können.

  • IN [WINDOW] WindowName
    Platziert ein Menü in dem mit WindowName angegebenen benutzerdefinierten Fenster. Wenn Sie diese Klausel nicht angeben, wird das Menü, sofern nicht ein benutzerdefiniertes Fenster aktiv ist, standardmäßig im Visual FoxPro-Hauptfenster platziert. Ist ein benutzerdefiniertes Fenster aktiv, wird es im aktiven Fenster platziert.

  • IN SCREEN
    Platziert das Menü explizit im Visual FoxPro-Hauptfenster.

  • FONT cFontName [, nFontSize]
    Gibt eine Schriftart für das Menü an. Sie können die Standardschriftart für ein einzelnes Menüelement außer Kraft setzen, indem Sie in DEFINE BAR eine FONT-Klausel angeben.

    cFontName gibt den Namen der Schriftart und nFontSize die Größe in Punkt (pt) an. Mit dem folgenden Befehl wird z. B. ein Menü mit der Schriftart "Courier" und einem Schriftgrad von 12 pt erstellt:

    DEFINE POPUP popMyPopup FONT 'Courier', 12
    

    Ist die angegebene Schriftart nicht verfügbar, wird eine Schrift mit ähnlichen Schriftmerkmalen verwendet. Wenn Sie die FONT-Klausel angeben, aber nicht mit nFontSize die Punktgröße festlegen, wird eine 10-pt-Schrift verwendet.

  • STYLE cFontStyle
    Gibt einen Standardschriftstil für das Menü an. Sie können den Standardschriftstil für ein einzelnes Menüelement außer Kraft setzen, indem Sie in DEFINE BAR eine FONT-Klausel angeben.

    Wenn Sie die STYLE-Klausel nicht angeben oder der angegebene Schriftstil nicht verfügbar ist, wird der Schriftstil "Normal" verwendet.

    In der folgenden Tabelle werden die Schriftstile zusammengefasst, die mit cFontStyle angegeben werden können:

    Zeichen Schriftstil
    B Fett
    I Kursiv
    N Normal
    Q Undurchsichtig
    - Durchgestrichen
    T Transparent
    U Unterstrichen

    Sie können durch Angabe mehrerer Zeichen Schriftstile kombinieren. Mit dem folgenden Befehl geben Sie z. B. "Fett Kursiv" an:

    DEFINE MENU popMyPopup STYLE 'BI'
    
  • FOOTER cFooterText
    Der mit cFooterText angegebene Text wird zentriert unter dem letzten jeweils sichtbaren Menüelement angezeigt.

  • KEY KeyLabel
    Gibt eine Zugriffstaste bzw. -tastenkombination für das Menü an. Informationen zu einer Liste mit den verfügbaren Tasten, Tastenkombinationen und den Tastennamen finden Sie unter ON KEY LABEL-Befehl.

    Die KEY-Klausel entspricht dem folgenden Befehl:

    ON KEY LABEL KeyLabel ACTIVATE POPUP MenuName
    

    Anmerkung   Ist bereits ein Tastaturmakro mit demselben Tastennamen definiert, hat das Makro Vorrang, so dass Sie das Menü nicht mit der angegebenen Taste oder Tastenkombination wählen können.

  • MARGIN
    Setzt ein zusätzliches Leerzeichen links und rechts neben jedes Menüelement. Markierungszeichen werden links neben den Menüelementen bzw. Pfeile, die auf zusätzliche überlappende Untermenüs hinweisen, rechts neben den Elementen angezeigt. Wird MARGIN nicht angegeben, überschreiben die Markierungszeichen das erste Zeichen der Menüelemente, und Pfeile, die auf Untermenüs hinweisen, überschreiben das letzte Zeichen der Menüelemente.

    Anmerkung   Sie müssen diese Klausel einfügen, wenn Sie die Klauseln DEFINE BAR ... PICTURE oder PICTRES verwenden möchten.

  • MARK cMarkCharacter
    Gibt ein Zeichen an, das links neben dem Element des Menüs angezeigt wird. Das Standardmarkierungszeichen ist ein Häkchen. Die MARK-Klausel wird ignoriert und das Standardmarkierungszeichen verwendet, wenn das Menü in das Visual FoxPro-Systemmenü integriert ist. Sie wird ebenfalls ignoriert, wenn "FoxFont" nicht die Schriftart des FoxPro-Hauptfensters oder des benutzerdefinierten Fensters ist, in dem das Menü angeordnet wird.

    Geben Sie MARK an, um das Standardmarkierungszeichen durch das mit cMarkCharacter angegebene Zeichen zu ersetzen. Enthält cMarkCharacter mehr als ein Zeichen, wird nur das erste angegebene Zeichen als Markierungszeichen verwendet.

    Anmerkung   Durch Angabe eines Markierungszeichens wird der jeweilige Menüeintrag noch nicht markiert. Verwenden Sie deshalb SET MARK OF zur Markierung eines Menüeintrags.

    Die MARK-Klausel legt das Markierungszeichen für alle Elemente eines Menüs fest. Mit DEFINE BAR-Befehlen angegebene Markierungszeichen haben Vorrang vor den Zeichen, die mit der MARK-Klausel in DEFINE POPUP-Befehlen angegeben werden. Mit SET MARK OF werden Markierungszeichen ein- und ausgeblendet. Dieser Befehl kann auch zur Angabe eines Markierungszeichens für ein einzelnes oder für alle Menüelemente verwendet werden.

  • MESSAGE cMessageText
    Zeigt eine Meldung in der grafischen Statusleiste an, wenn Sie einen Menüeintrag auswählen. . Wurde die zeichenorientierte Statusleiste mit SET STATUS ON eingeblendet, wird die Meldung zentriert in der letzten Zeile des Visual FoxPro-Hauptfensters angezeigt.

  • MOVER
    Setzt einen Doppelpfeil in das Verschiebefeld links neben das ausgewählte Menüelement. Sie können den Doppelpfeil ziehen, um das Element im Menü an eine andere Position zu verschieben. Mit Hilfe von GETBAR( ) können Sie bestimmen, an welcher Stelle im Menü sich die einzelnen Elemente befinden.

    Die Anordnung der mit einer PROMT-Klausel erstellten Elemente in einem Menü lässt sich dagegen nicht ändern.

  • MULTISELECT
    Ermöglicht es dem Benutzer, mehrere Elemente gleichzeitig aus einem Menü zu wählen. Wählt der Benutzer ein Element aus dem Menü, wird das Markierungszeichen links neben dieses Element gesetzt.

    Aus einem Menü, das mit einer PROMPT-Klausel erstellt wurde, können nicht mehrere Elemente gleichzeitig gewählt werden.

    Mit MRKBAR( ) lässt sich ermitteln, welche Elemente des Menüs gewählt sind.

    Bei Verwendung der MULTISELECT-Klausel in DEFINE POPUP empfiehlt es sich, MARGIN anzugeben, damit neben den einzelnen Menüelementen genug Platz für das Markierungszeichen frei bleibt.

    Im folgenden Beispiel wird das Menü popFruits erstellt. Mit MULTISELECT wird dabei ein Menü erstellt, in dem mehrere Elemente gewählt werden können.

    Für jedes der vier Elemente wird ein eigenes Markierungszeichen verwendet. Wählen Benutzer Elemente aus dem Menü, werden diese markiert und die Routine yourchoice zeigt die gewählten Elemente an.

    CLEAR
    IF NOT _DOS
       MODIFY WINDOW SCREEN FONT 'foxfont', 12
    ENDIF
    ACTIVATE SCREEN
    DEFINE POPUP popFruits FROM 5,5 ;
       MULTISELECT MARGIN            && Create multi-choice menu
    DEFINE BAR 1 OF popFruits ;
       PROMPT '\<Apples'  MARK CHR(3)    && First item
    DEFINE BAR 2 OF popFruits ;
       PROMPT '\<Bananas' MARK CHR(4)    && Second item
    DEFINE BAR 3 OF popFruits ;
       PROMPT '\<Grapes'  MARK CHR(5) && Third item
    DEFINE BAR 4 OF popFruits ;
       PROMPT '\<Lemons'  MARK CHR(6)    && Fourth item
    @ 12,5 SAY 'Your choices:'
    ON SELECTION POPUP popFruits DO yourchoice    && Choice routine
    ACTIVATE POPUP popFruits 
    PROCEDURE yourchoice            && Executed when choice is made
    @ 13,5 CLEAR
    FOR gnCount = 1 TO CNTBAR('popFruits')      && Loop for # of items
       IF MRKBAR('popFruits', gnCount) = .T.      && Option is marked,
          ? PRMBAR('popFruits', gnCount) AT 5      && display caption
       ENDIF
    NEXT
    
  • PROMPT FIELD FieldName
    Gibt den Feldnamen einer geöffneten Tabelle an, deren Datensätze im Menü als Elemente angezeigt werden. Das Menü enthält dann ein Element für jeden Datensatz der Tabelle. Wird es aktiviert, wird der Arbeitsbereich der Tabelle ausgewählt.

    Tipp   Sie können die Vorteile der Rushmore-Optimierung nutzen, indem Sie für das Feld, das Sie zur Verwendung im Menü mit PROMPT FIELD angegeben haben, einen Filter festlegen. Weitere Informationen zur Rushmore-Optimierung finden Sie unter SET OPTIMIZE und Verwenden von Rushmore zum Beschleunigen des Datenzugriffs unter Optimieren von Anwendungen.

    FieldName kann ebenfalls mehrere Feldnamen und Ausdrücke enthalten, die mit dem Additionsoperator (+) zusammengefügt sind. Ferner kann FieldName der Name eines Feldes einer in einem anderen Arbeitsbereich geöffneten Tabelle oder eine benutzerdefinierte Funktion sein.

    Die Anzahl der Einträge, die in einem mit PROMPT FIELD erstellten Menü angezeigt werden können, ist nicht begrenzt.

  • PROMPT FILES [LIKE FileSkeleton]
    Erstellt ein Menü, das die Namen der im aktuellen Verzeichnis oder Ordner verfügbaren Dateien anzeigt.

    LIKE FileSkeleton bietet die Möglichkeit, anhand von Platzhaltern anzugeben, welche Dateien im Menü angezeigt werden. Wenn Sie z. B. ein Menü erstellen möchten, das die im Standardlaufwerk und -verzeichnis verfügbaren Tabellennamen anzeigt, können Sie folgenden Befehl verwenden:

    PROMPT FILES LIKE *.DBF
    

    Sie können ferner ein Menü erstellen, das auch die Dateinamen anderer Laufwerke und Verzeichnisse anzeigt, indem Sie eine Laufwerksangabe, eine Verzeichnisangabe oder beides einfügen. Wenn Sie z. B. ein Menü erstellen möchten, das die Namen der Programmdateien im Verzeichnis Programs auf Laufwerk C anzeigt, können Sie folgenden Befehl verwenden:

    PROMPT FILES LIKE C:\PROGRAMS\*.PRG
    
  • PROMPT STRUCTURE
    Zeigt die Namen der Felder der aktuellen Tabelle im Menü entsprechend der Feldstruktur der Tabelle an. Bei Aktivierung des Menüs wird der Arbeitsbereich der Tabelle ausgewählt.

  • RELATIVE
    Gibt die Reihenfolge an, in der die Elemente im Menü angeordnet werden. Wenn Sie ein Menü ohne die RELATIVE-Klausel erstellen, wird die Position des Elements im Menü durch die Leistennummer bestimmt. Im Menü wird Platz für nicht definierte Elemente reserviert. Angenommen, das erste und dritte Element sind definiert und das Menü wird aktiviert, dann wird in diesem Menü für das zweite Element eine Leerzeile eingefügt.

    Definieren Sie ein Menü mit der RELATIVE-Klausel, werden die Elemente innerhalb des Menüs in der Reihenfolge, in der sie definiert wurden, angezeigt. Es wird dann kein Platz für undefinierte Elemente reserviert.

    Bei einem Menü, das mit der RELATIVE-Klausel definiert wird, können Sie ebenfalls die Klauseln BEFORE und AFTER des DEFINE BAR-Befehls verwenden, um die Elemente in einem Menü in Relation zu den anderen Menüelementen zu positionieren. Werden die Klauseln BEFORE und AFTER mit dem DEFINE BAR-Befehl bei einem Menü verwendet, das nicht mit der RELATIVE-Klausel definiert wurde, erzeugt dies einen Fehler.

    Führen Sie das folgende Beispielprogramm aus und vergleichen Sie die Reihenfolge und Anordnung der Menüelemente im jeweiligen Menü:

** RELATIVE Example ** DEFINE POPUP popRelatYes RELATIVE FROM 1,1 DEFINE BAR 4 OF popRelatYes PROMPT '4444' DEFINE BAR 3 OF popRelatYes PROMPT '3333' DEFINE BAR 2 OF popRelatYes PROMPT '2222' DEFINE BAR 1 OF popRelatYes PROMPT '1111' DEFINE BAR 6 OF popRelatYes PROMPT '6666' BEFORE 4 ACTIVATE POPUP popRelatYes ** NON-RELATIVE Example ** DEFINE POPUP popRelatNo FROM 1,1 DEFINE BAR 4 OF popRelatNo PROMPT '4444' DEFINE BAR 3 OF popRelatNo PROMPT '3333' DEFINE BAR 2 OF popRelatNo PROMPT '2222' DEFINE BAR 1 OF popRelatNo PROMPT '1111' DEFINE BAR 6 OF popRelatNo PROMPT '6666' ACTIVATE POPUP popRelatNo

  • SCROLL
    Ordnet rechts neben dem erstellen Menü eine Bildlaufleiste an. Diese Bildlaufleiste wird nur angezeigt, wenn mehr Elemente vorhanden sind, als im Menü angezeigt werden können, oder das Menü zu lang für das Visual FoxPro-Hauptfenster oder das benutzerdefinierte Fenster ist, in das es platziert wurde.

  • SHORTCUT
    Erstellt ein Kontextmenü. Ein Kontextmenü wird normalerweise angezeigt, wenn auf eine Auswahl, eine Symbolleiste oder eine Task-leistenschaltfläche mit der rechten Maustaste geklickt wird. Die im Kontextmenü angezeigten Befehle beziehen sich auf den Bildschirmbereich, in den mit der rechten Maustaste geklickt wurde.

    Sie können in der FROM-Klausel MROW( ) und MCOL( ) zum Aktivieren des Kontextmenüs an der Stelle, an der der Mausklick erfolgt, einbeziehen.

  • TITLE cMenuTitleText
    Zeigt zentriert am oberen Rand des Menüs einen Titel an. cTitleText gibt dabei den Text für den Titel an.

  • COLOR SCHEME nSchemeNumber
    Gibt die Farben aller Elemente des Menüs an. Standardmäßig sind die Farben der mit DEFINE POPUP erstellten Menüs durch das Farbschema 2 bestimmt.

  • COLOR ColorPairList
    Gibt die Farben aller Elemente des Menüs an.

    Weitere Informationen zu Farbschemas und Farbpaaren finden Sie unter Farben - Überblick.

Hinweise

Verwenden Sie zum Anordnen einer Reihe von Elementen, die Sie für ein Menü definieren, die entsprechende Anzahl an DEFINE BAR-Befehlen. Möchten Sie Datensätze, Dateien oder Felder in einem Menü anzeigen, verwenden Sie die DEFINE POPUP-Optionen PROMPT FIELD, PROMPT FILES oder PROMPT STRUCTURE.

Wird das Menü mit ACTIVATE POPUP angezeigt und aktiviert, können Sie eines der Elemente aus dem Menü wählen. In Abhängigkeit vom gewählten Element kann eine Routine ausgeführt oder ein weiteres Menü angezeigt und aktiviert werden. Ein Menü, das ein weiteres Menü bei Auswahl eines Elements anzeigt, wird als überlappendes Untermenü bezeichnet. Weitere Informationen zum Erstellen von Untermenüs finden Sie unter ON BAR-Befehl.

Wenn Sie das Menü mit dem Menü-Designer erstellen, müssen Sie diese Befehle möglicherweise nicht verwenden, da der Menü-Designer automatisch die Befehle für Ihr Menü erstellt. Der Menü-Designer verwendet das Visual FoxPro-Systemmenü, zu dem Sie Ihre eigenen Menüeinträge hinzufügen können.

Weitere Informationen zum Erstellen von Menüs finden Sie unter Erstellung eines Menüsystems.

Beispiel

Im folgenden Beispiel werden mit DEFINE POPUP Menüs erstellt, die aktiviert werden, sobald ein Menütitel in der Menüleiste gewählt wird. Die aktuelle Systemmenüleiste wird zuerst mit SET SYSMENU SAVE im Arbeitsspeicher gespeichert, und anschließend werden alle Systemmenütitel mit SET SYSMENU TO entfernt.

Mit DEFINE PAD werden zwei neue Systemmenütitel erstellt und anschließend mit DEFINE POPUP ein Dropdown-Menü für jeden Titel erstellt. Mit DEFINE BAR werden Menüelemente innerhalb der Menüs erzeugt. Wird ein Menütitel gewählt, wird mit der ACTIVATE POPUP-Klausel von ON PAD das entsprechende Menü aktiviert.

Wird aus einem Menü ein Element gewählt, verwendet ON SELECTION POPUP die Funktionen PROMPT( ) und POPUP( ), um der Prozedur CHOICE die Elementnummer und den Menünamen zu übergeben. CHOICE zeigt den Namen des gewählten Elements sowie den Namen des Menüs, in dem das Element enthalten ist, an. Wird der Befehl Exit aus dem Menü Card Info gewählt, wird das ursprüngliche Systemmenü von Visual FoxPro wiederhergestellt.

** Name this program DEFINPOP.PRG ** CLEAR SET SYSMENU SAVE SET SYSMENU TO DEFINE PAD convpad OF _MSYSMENU PROMPT '<Conversions' COLOR SCHEME 3 ; KEY ALT+C, '' DEFINE PAD cardpad OF _MSYSMENU PROMPT 'Card <Info' COLOR SCHEME 3 ; KEY ALT+I, '' ON PAD convpad OF _MSYSMENU ACTIVATE POPUP conversion ON PAD cardpad OF _MSYSMENU ACTIVATE POPUP cardinfo DEFINE POPUP conversion MARGIN RELATIVE COLOR SCHEME 4 DEFINE BAR 1 OF conversion PROMPT 'Ar<ea' KEY CTRL+E, '^E' DEFINE BAR 2 OF conversion PROMPT '<Length' ; KEY CTRL+L, '^L' DEFINE BAR 3 OF conversion PROMPT 'Ma<ss' ; KEY CTRL+S, '^S' DEFINE BAR 4 OF conversion PROMPT 'Spee<d' ; KEY CTRL+D, '^D' DEFINE BAR 5 OF conversion PROMPT '<Temperature' ; KEY CTRL+T, '^T' DEFINE BAR 6 OF conversion PROMPT 'T<ime' ; KEY CTRL+I, '^I' DEFINE BAR 7 OF conversion PROMPT 'Volu<me' ; KEY CTRL+M, '^M' ON SELECTION POPUP conversion; DO choice IN definpop WITH PROMPT( ), POPUP( ) DEFINE POPUP cardinfo MARGIN RELATIVE COLOR SCHEME 4 DEFINE BAR 1 OF cardinfo PROMPT '<View Charges' ; KEY ALT+V, '' DEFINE BAR 2 OF cardinfo PROMPT 'View <Payments' ; KEY ALT+P, '' DEFINE BAR 3 OF cardinfo PROMPT 'Vie<w Users' ; KEY ALT+W, '' DEFINE BAR 4 OF cardinfo PROMPT '-' DEFINE BAR 5 OF cardinfo PROMPT '<Charges ' DEFINE BAR 6 OF cardinfo PROMPT '-' DEFINE BAR 7 OF cardinfo PROMPT 'E<xit ' ON SELECTION POPUP cardinfo; DO choice IN definpop WITH PROMPT( ), POPUP( ) PROCEDURE choice PARAMETERS mprompt, mpopup WAIT WINDOW 'You chose ' + mprompt + ; ' from popup ' + mpopup NOWAIT IF mprompt = 'Exit' SET SYSMENU TO DEFAULT ENDIF

Siehe auch

ACTIVATE POPUP | CNTBAR( ) | CREATE MENU | DEFINE BAR | GETBAR( ) | HIDE POPUP | MOVE POPUP | MRKBAR( ) | ON BAR | ON SELECTION BAR | POPUP( ) | PRMBAR( ) | PROMPT( ) | RELEASE POPUPS | SET MARK OF | SET MESSAGE | SIZE POPUP | SHOW POPUP