DEFINE BAR-Befehl
Erstellt in einem mit DEFINE POPUP erstellten Menü einen Menüeintrag.
DEFINE BAR nMenuItemNumber1 | SystemItemName OF MenuName
PROMPT cMenuItemText [PICTURE cFileName] [PICTRES cMenubarName]
[BEFORE nMenuItemNumber2 | AFTER nMenuItemNumber3]
[FONT cFontName [, nFontSize]] [STYLE cFontStyle]
[KEY KeyLabel [, cKeyText]] [MARK cMarkCharacter]
[MESSAGE cMessageText] [SKIP [FOR lExpression]]
[COLOR SCHEME nSchemeNumber | COLOR ColorPairList]
[MRU] [INVERT]
Parameter
nMenuItemNumber1
Gibt die Nummer des Menüeintrags an. Mit Hilfe der Nummer des Menüeintrags können Sie in anderen Befehlen und Funktionen auf den Menüeintrag verweisenSystemItemName
Gibt einen Menüeintrag eines Visual FoxPro-Systemmenüs an. Wenn Sie beispielsweise den Zugriff auf den Menüeintrag Print... ermöglichen möchten, geben Sie den folgenden Befehl ein:DEFINE BAR _MFI_PRINT OF popMyPopup PROMPT "Print..."
Nicht alle Visual FoxPro-Systemmenüeinträge stehen hierfür zur Verfügung. Mit SYS(2013) können Sie eine Liste der verfügbaren Visual FoxPro-Systemmenüs zurückgeben lassen.
OF MenuName
Gibt den Namen des Menüs an, in dem die neu erstellten Menüeinträge angezeigt werden.PROMPT cMenuItemText
Gibt die Beschriftung des Menüeintrags an, die im Menü angezeigt wird.Sie können eine Trennlinie erstellen, indem Sie für cMenuItemText einen umgekehrten Schrägstrich und einen Bindestrich (\-) angeben. Trennlinien werden in Menüs zum Gruppieren der einzelnen Menüeinträge verwendet. Wenn Sie z. B. den folgenden Befehl in einer Menüdefinition angeben, wird zwischen dem dritten und fünften Menüeintrag eine Trennlinie eingefügt:
DEFINE BAR 4 OF popMyPopup PROMPT '\-'
Sie können mehrspaltige Menüs erzeugen, indem Sie einen umgekehrten Schrägstrich und einen vertikalen Strich (\|) vor cMenuItemText stellen. Der Menüeintrag beginnt eine neue Spalte, und künftige Menüeinträge werden in der gleichen Spalte abgelegt, bis ein anderer Menüeintrag mit \| beginnt. Beispiel: wenn man den folgenden Befehl in eine Menüdefinition einbindet, wird eine neue Spalte im Menü erzeugt:
DEFINE BAR 4 OF popMyPopup PROMPT '\|Start a new column'
Sie können für einen Menüeintrag eine Zugriffstaste definieren, indem Sie einen umgekehrten Schrägstrich und ein Kleiner-als-Zeichen (\<) vor das Zeichen stellen, das Sie als Zugriffstaste verwenden möchten. Beispiel:
DEFINE POPUP popReceive DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' DEFINE BAR 2 OF popReceive PROMPT 'In\<quiry' ACTIVATE POPUP popReceive
Der Benutzer kann aus dem Menü Receive mit der Taste I den Befehl Invoices und mit der Taste Q den Befehl Inquiry wählen.
PICTURE cPictureName
Ermöglicht das Verwenden eines vorhandenen Bildes mit der Menüleiste. Sie können cPictureName in einem relativen Pfad angeben.PICTRES cMenubarName
Gibt den Namen einer Systemmenüleiste als Menüressource an. Wenn cPictureName = "", dann wird der Inhalt des Feldes Resname der Tabellenstruktur MNX als Dateiname behandelt, der in DEFINE BAR…PICTURE verwendet wird. Dies ist eine neue Funktionalität bei dieser Version von Visual FoxPro.Anmerkung Sie müssen in den entsprechenden DEFINE POPUP-Befehl eine MARGIN-Klausel einfügen, damit die Klauseln PICTURE oder PICTRES funktionsfähig sind.
BEFORE nMenuItemNumber2
Ordnet den Menüeintrag über dem mit nMenuItemNumber2 angegebenen Menüeintrag an.AFTER nMenuItemNumber3
Ordnet den Menüeintrag unter dem mit nMenuItemNumber3 angegebenen Menüeintrag an.Anmerkung BEFORE und AFTER sind nur wirksam, wenn Sie beim Erstellen des Menüs mit DEFINE POPUP die RELATIVE-Klausel angegeben haben.
In der BEFORE- und AFTER-Klausel können Sie auch _MFIRST und _MLAST angeben. Wenn Sie _MFIRST in der BEFORE-Klausel angeben, ist der Menüeintrag der erste Eintrag des Menüs. Wenn Sie _MFIRST in der AFTER-Klausel angeben, ist der Menüeintrag das zweite Element des Menüs. Wenn Sie _MLAST in der AFTER-Klausel angeben, ist der Menüeintrag der letzte Eintrag des Menüs. Wenn Sie _MLAST in der BEFORE-Klausel angeben, ist der Menüeintrag der vorletzte Eintrag des Menüs.
In mit DEFINE POPUP RELATIVE erstellten Menüs wird kein Platz für nicht definierte Menüeinträge reserviert. Wenn Sie also in einem solchen Menü die Menüeinträge 1, 2, 4 und 5 definieren, wird für Menüeintrag 3 kein Platz reserviert. Sie können Menüeintrag 3 jedoch später einfügen.
Im folgenden Beispielprogramm werden die Unterschiede in der Reihenfolge und Anordnung der Elemente in den jeweiligen Menütypen gezeigt:
* DEFINE POPUP... 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 * DEFINE POPUP... non-relative example DEFINE POPUP popRelatNo FROM 1,10 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 popRelatYes NOWAIT && Display "relative" poup ACTIVATE POPUP popRelatNo && Display "non-relative" popup
FONT cFontName [, nFontSize]
Gibt eine Schriftart für den Menüeintrag an. cFontName gibt den Namen der Schriftart und nFontSize die Größe in Punkt (pt) an. Mit dem folgenden Befehl wird z. B. ein Menüeintrag mit der Schriftart "Courier" und einem Schriftgrad von 12 pt erstellt:DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' 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 Schriftstil für den Menüeintrag an. Ist keine STYLE-Klausel angegeben, wird der Schriftstil "Normal" verwendet. Wenn der angegebene Schriftstil nicht verfügbar ist, wird der Schriftstil "Normal" verwendet.Mit cFontStyle können Sie die folgenden Schriftstile angeben:
Zeichen Schriftstil B Fett I Kursiv N Normal Q Undurchsichtig – Durchgestrichen T Transparent U Unterstrichen Sie können durch Einbeziehen mehrerer Zeichen Schriftstile kombinieren. Mit dem folgenden Befehl geben Sie z. B. "Fett Kursiv" an:
DEFINE BAR 1 OF popReceive PROMPT '\<Invoices' STYLE 'BI'
KEY KeyLabel [, cKeyText]
Gibt eine Zugriffstaste bzw. -tastenkombination für den Menüeintrag an. Im Gegensatz zu den mit einem umgekehrten Schrägstrich und einem Kleiner-als-Zeichen (\<) zugewiesenen Zugriffstasten muss das Menü nicht aktiviert sein, damit der Menüeintrag gewählt werden kann.Für eine Liste mit den verfügbaren Tasten und Tastenkombinationen und ihre Tastennamen siehe ON KEY LABEL
Anmerkung Wenn bereits ein Tastaturmakro mit demselben Tastennamen definiert ist, hat das Tastaturmakro Vorrang, so dass Sie den Menüeintrag nicht mit der angegebenen Taste oder Tastenkombination wählen können.
Geben Sie cKeyText an, um den Tastennamen durch eigenen Text zu ersetzen. Sie können als Parameter cKeyText jedes beliebige Zeichen verwenden. So können Sie z. B. den Text "^B" angeben, der anstelle des Tastennamens STRG+B angezeigt wird. Bei Angabe von KEY STRG+B wird der Text STRG+B im Menü neben dem Namen des Menüeintrags bzw. bei Angabe von KEY CTRL+B, "^B" der Text "^+B" im Menü angezeigt. Sie können die Anzeige eines Tastennamens unterdrücken, indem Sie für cKeyText eine leere Zeichenfolge angeben.
MARK cMarkCharacter
Gibt ein Markierungszeichen an, das links neben dem Menüeintrag angezeigt 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.Das Standardmarkierungszeichen ist ein Häkchen.
Die MARK-Klausel wird ignoriert und das Standardmarkierungszeichen verwendet, wenn das Menü, zu dem der Menüeintrag gehört, in das Visual FoxPro-Systemmenü integriert ist. Außerdem wird die MARK-Klausel ignoriert, wenn "FoxFont" nicht die Schriftart des Visual FoxPro-Hauptfensters oder des benutzerdefinierten Fensters ist, in dem das Menü angeordnet wird, zu dem Menüeintrag gehört.
Anmerkung Durch Angabe eines Markierungszeichens wird der jeweilige Menüeintrag noch nicht markiert. Verwenden Sie deshalb SET MARK OF zur Markierung eines Menüeintrags.
In DEFINE BAR angegebene Markierungszeichen setzen Markierungszeichen, die mit MARK in DEFINE POPUP angegeben wurden, außer Kraft. Mit SET MARK OF werden Markierungszeichen ein- und ausgeblendet. Dieser Befehl kann auch verwendet werden, um ein Markierungszeichen für einen einzelnen Menüeintrag oder für alle Menüeinträge anzugeben.
MESSAGE cMessageText
Zeigt eine Meldung an, wenn der Benutzer einen Menüeintrag auswählt. . Wurde die grafische Statusleiste mit SET STATUS BAR OFF ausgeblendet, wird die Meldung zentriert in der letzten Zeile des Visual FoxPro-Hauptfensters angezeigt.SKIP [FOR lExpression] Dient zur Angabe einer Bedingung.
Wenn die Auswertung von lExpression Wahr (.T.) ergibt, ist der Menüeintrag deaktiviert und kann vom Benutzer nicht gewählt werden. Ergibt die Auswertung Falsch (.F.), ist der Menüeintrag aktiviert. Ein deaktivierter Menüeintrag wird in den Farben, die für deaktivierte Menüeinträge festgelegt wurden, angezeigt.Sie können einen Menüeintrag auch deaktivieren, indem Sie einen umgekehrten Schrägstrich \ vor den Menütext setzen. Beispiel:
DEFINE BAR 1 OF popReceive PROMPT '\Invoices'
Ein mit SKIP oder einem umgekehrten Schrägstrich (\) deaktivierter Menüeintrag kann nicht ausgewählt werden. Wenn Sie beim Erstellen von Menüs SKIP FOR-Ausdrücke angeben, funktionieren die Menüs möglicherweise nicht korrekt, wenn die Rechtschreibprüfung oder Assistenten aktiv sind.
SKIP FOR-Ausdrücke hängen normalerweise vom Wert der Deaktivierungsvariablen ab, aber diese Variablen sind für Ihre Menüs nicht sichtbar, wenn die Rechtschreibprüfung oder Assistenten aktiv sind. Im Initialisierungscode der Rechtschreibprüfung und der Assistenten (SPELLCHK.APP bzw. GENGRAPH.APP) wird bewusst PRIVATE ALL ausgegeben. Dies bewirkt, dass die Deaktivierungsvariablen für benutzerdefinierte Menüs nicht mehr sichtbar sind und eine Fehlermeldung angezeigt wird, wenn Sie ein Menü wählen.
Um dies zu korrigieren, steht der folgende Code am Anfang der Rechtschreibprüfungs- und der Assistentenanwendungen:
IF TYPE("_memvarmask") = "C" and !EMPTY(_memvarmask) PRIVATE ALL EXCEPT &_memvarmask ELSE PRIVATE ALL ENDIF
Angenommen, ein bestimmter Menüeintrag soll deaktiviert werden, wenn die Auswertung der Variablen "skipvar" den Wert Wahr (.T. ) ergibt. In diesem Fall nutzen Sie die Variable _MEMVARMASK und nehmen die folgenden Zeilen in den Startcode des Menüs auf:
PUBLIC _memvarmask _memvarmask = "skipvar" STORE .T. TO skipvar && Skip initially.
Um eine Reihe von Deaktivierungsvariablen zu erstellen, nehmen Sie die folgenden Zeilen in den Startcode des Menüs auf:
PUBLIC _memvarmask _memvarmask = "skip*" STORE .T. TO skipthis, skipthat && Skip initially.
Wenn Sie jetzt die Rechtschreibprüfung sowie Assistenten ausführen, machen diese die Variablen in SKIP FOR-Ausdrücken nicht mehr unsichtbar.
Beachten Sie, dass _MEMVARMASK keine Systemvariable ist.
COLOR SCHEME nSchemeNumber
Gibt die Farben für einen individuellen Menüeintrag an. Dabei werden die Standardfarben oder die mit DEFINE POPUP angegebenen Farben außer Kraft gesetzt.COLOR ColorPairList
Gibt die Farben für einen individuellen Menüeintrag an. Dabei werden die Standardfarben oder die mit DEFINE POPUP angegebenen Farben außer Kraft gesetzt. Sie können die Farben aller Menüeinträge, Markierungszeichen und Meldungen angeben.Standardmäßig sind die Farben von Menüeinträgen durch das Farbschema 2 des aktuellen Farbsatzes bestimmt.
Weitere Informationen zu Farbschemata und Farbpaaren finden Sie unter Farben - Überblick.
MRU
Gibt an, dass das Menü vertikale Chevrons anzeigt und damit ein Menü vom Typ Most Recently Used (zuletzt verwendet) angibt. Sie müssen ein Skript liefern, das die Menüs dynamisch behandelt und gegebenenfalls neue Menüleisten hinzufügt. Bei Menüs, die mit dem MRU-Schlüsselwort aufgerufen werden, legt Visual FoxPro eine Verzögerung von 1 bis 2 Sekunden fest, bevor der ON SELECTION BAR-Befehl ausgelöst wird. Durch Klicken auf die Menüleiste kann der Benutzer den ON SELECTION BAR-Befehl direkt auslösen.Wird das MRU-Schlüsselwort verwendet, ignoriert Visual FoxPro PROMPT sowie andere Schlüsselwörter, die mit der Menüleiste verknüpft sind.
DEFINE BAR 4 OF popMyPopup MRU
INVERT
Gibt an, dass das Menü mit einem vertieften Effekt angezeigt wird.DEFINE BAR 4 OF popMyPopup PROMPT '\|Start a new column' ; PICTRES _med_copy INVERT
Hinweise
DEFINE BAR wird zusammen mit DEFINE POPUP zum Erstellen von Menüs verwendet. DEFINE POPUP erstellt ein Menü und weist diesem einen Namen zu. Mit einer Reihe von DEFINE BAR-Befehlen können Sie dann einzelne Menüeinträge in das Menü stellen.
Wenn Sie den Menu-Designer zum Erstellen eines Menüs verwenden, werden diese Befehle u. U. überhaupt nicht benötigt. Der Menü-Designer erstellt automatisch die Befehle für Ihr Menü. 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 Entwerfen von Menüs und Symbolleisten.
Sie können auch ein Menü mit Datensätzen oder Feldern einer Tabelle oder einer Liste von auf Datenträger verfügbaren Dateien erstellen. Weitere Informationen hierzu finden Sie in den Abschnitten zu den PROMPT FIELD-, PROMPT STRUCTURE- und PROMPT FILES-Klauseln des Befehls DEFINE POPUP.
Verwenden Sie ON BAR, um ein überlappendes Untermenü zu einem Menüeintrag zu erstellen.
Beispiel
Im folgenden Beispiel werden mit DEFINE BAR Einträge in Menüs erstellt. 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ünamen erstellt. DEFINE POPUP wird dann zum Erstellen eines Dropdown-Menüs für jeden Menünamen verwendet. Die Einträge dieser Menüs werden mit DEFINE BAR erstellt. 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 aus dem Menü Card Info der Befehl Exit gewählt, wird das Visual FoxPro-Systemmenü wiederhergestellt.
_** Name this program DEFINBAR.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 definbar 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 definbar 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 | DEACTIVATE POPUP | DEFINE POPUP | HIDE POPUP | RELEASE BAR | SET MESSAGE | SHOW POPUP