5. Überblick Menüs

5.1. Die Haupt-Menüs

In diesem Abschnitt werden die Menüfunktionen und einige andere Funktionen, die im Zusammenhang mit Menüs verwendet werden, beschrieben.

In UniPlot gibt es mehrere Menüs. Welches Menü angezeigt wird, hängt davon ab, welches Fenster aktiv ist. Die Menüs haben Namen:

Wert Bedeutung
„Editor“ Dieses Menü wird angezeigt, wenn ein Editor aktiv ist.
„Document“ Dieses Menü wird angezeigt, wenn ein Dokument mit Diagrammseiten aktiv ist.
„DocumentServer“ Dieses Menü wird angezeigt, wenn eine UniPlot-Dokumentseite in einem anderen Anwendungsprogramm eingebettet ist (OLE).
„Command“ Dieses Menü wird angezeigt, wenn das UniScript-Kommandofenster aktiv ist.
„Main“ Dieses Menü wird angezeigt, wenn keine MDI-Fenster im UniPlot-Hauptfenster vorhanden sind. Das ist normalerweise der Fall nachdem UniPlot gestartet wurde.

UniPlot hat fest eingebaute Menüs, die mit UniScript-Funktionen geändert werden können. Es gibt drei wichtige Funktionen für Menüs: MnInsert, MnAppend und MnSetCommand. Die Funktionen werden normalerweise beim Start von UniPlot/UniScript aufgerufen. Die Änderungen, die UniScript an den UniPlot-Menüs durchführt, befinden sich in der Datei do_cmds.IC.

Beispiel

Hier nur ein einfaches Beispiel:

nID = MnGetNewCommandID();
MnInsert("Document", 1, 7, nID, "My Import");
MnDrawMenuBar();
MnSetCommand(nID, "DoMyImport()");

MnInsert fügt einen Eintrag in ein Menü ein. Hier wird in das Dokument-Menü die Zeichenkette "My Import" eingefügt. Die drei Zahlen haben folgende Bedeutung: Die erste Zahl ist die Nummer des Unter-Menüs. Das erste Unter-Menü ist das Datei(Unter)-Menü. Die Zahl 7 bewirkt, daß die Zeichenkette "My Import" an die siebte Position im Datei-Menü eingefügt wird. Die Zahl nID ist ein Index auf die UniPlot/UniScript Kommandotabelle. Um einen neuen, eindeutigen Index zu erzeugen, sollt die Funktion MnGetNewCommandID verwendet werden.

MnDrawMenuBar sollte nach Änderungen eines Menüs aufgerufen werden, damit der Menü-Balken neu gezeichnet wird, sonst gibt es Darstellungsfehler am Menü.

MnSetCommand ordnet einem Index, der mit MnInsert erzeugt wurde, ein UniScript-Kommando zu. Der Index muss zwischen 0 und 1023 liegen, da die Kommandotabelle 1024 Einträge hat. Es kann im Prinzip ein beliebiges UniScript-Kommando angegeben werden, die Zeichenkette darf jedoch nur 32 Zeichen enthalten. Normalerweise wird man als Kommando einen Funktionsaufruf angeben, wie bei MnSetCommand(99, "DoMyImport()");.

5.3. OnCommandUI

Menü-Elemente können ein und ausgeblendet oder in grau angezeigt werden, um dem Benutzer darüber zu informieren, dass die entsprechende Funktion nicht verfügbar ist. Links vom Menüeintrag kann ein Häckchen angezeigt werden. Siehe dazu die Dokumentation OnCommandUI.

5.4. Die Kontext-Menüs

Ab UniPlot 3.05 können Objekte eigene Menüs haben, die über einen rechten Mausklick auf dem Objekt geöffnet werden. Die Menüs können Popup-Menüs enthalten.

Beispiel

Beispiel: Menüeintrag in das Kontext-Menü eines Textobjekts einfügen:

MenuInsertCommands("OBJ_TB", [""; "MyLegendFunc"], 32000);
MnSetCommand("MyLegendFunc", "Legende...");

Beispiel: Menüeintrag mit weiterem Popup-Menü in das Kontext-Menü eines Textobjekts einfügen.

MenuCreatePopup("OBJ_TB-Legend", [..
    "_Test1";
    "_Test2"]);
MenuInsertCommands("OBJ_TB", [""; "OBJ_TB-Legend@Legende"], 32000);
MnSetCommand("_Test1", "Legende1...");
MnSetCommand("_Test2", "Legende2...");

Beispiel: Menüeintag „Translate“ in Kontext-Menü eines Diagramms einfügen. Kopieren Sie das folgende Skript in eine IC-Datei und speichern Sie die Datei im autolaod-Verzeichnis von UniPlot:

def _popup_InitTranslateMenu()
{
    global g_bTranslateMenuInit;
    if (g_bTranslateMenuInit) {
        return;
    }
    g_bTranslateMenuInit = 1;
    MenuCreatePopup("OBJ_LAYER-Translate", [..
        "OnTranslateEnglish";
        "OnTranslateGerman";
        "OnTranslateSpanish"]);
    MenuInsertCommands("OBJ_LAYER", [""; "OBJ_LAYER-Translate@Translate"], 32000);
    MnSetCommand("OnTranslateEnglish", "English...");
    MnSetCommand("OnTranslateGerman", "German...");
    MnSetCommand("OnTranslateSpanish", "Spanish...");
}
_popup_InitTranslateMenu()
def OnTranslateEnglish()
{
    hPage = AppGetActivePage();
    if (hPage == 0) {
        return 0;
    }
    hvLayer = PageGetAllLayers(hPage)
    if (hvLayer[1] == 0) {
        return 0;
    }
    // etc..
    MessageBox("english");
}
def OnTranslateGerman()
{
    MessageBox("german");
}
def OnTranslateSpanish()
{
    MessageBox("spanish");
}
  Überblick Menüs
MenuCreatePopup MenuCreatePopup erzeugt ein Popup-Menü.
MenuDisplayContextMenu MenuDisplayContextMenu
MenuGetMap MenuGetMap
MenuGetPopup MenuGetPopup liefert die Namen der Funktionen eines Popup-Menüs.
MenuInsertCommands MenuInsertCommands fügt Kommandos in ein Popup-Menü ein.
MnAppend Die Funktion hängt entweder ein leeres Menü an eine Menüleiste oder einen einzelnen Menüeintrag an ein Menü an.
MnDrawMenuBar MnDrawMenuBar zeichnet das Menü neu.
MnGetNewCommandID MnGetNewCommandID liefert eine neue Kommando-Identifikationsnummer.
MnGetStrings MnGetStrings gibt einen Vektor mit den Zeichenketten eines Menüs zurück.
MnInsert MnInsert fügt einen Eintrag in ein Menü ein.
MnInsertPopup MnInsertPopup fügt einen Popup-Menüeintrag in ein Menü ein.
MnRemove MnRemove entfernt ein vollständiges Menü oder einen einzelnen Menüeintrag.
MnSetChecked MnSetChecked markiert einen Menüpunkt oder schaltet die Markierung ab.
MnSetCommand MnSetCommand ordnet einem Menüeintrag ein UniScript-Kommando zu.
OnCommand Der Funktionsname OnCommand steht für den Namen einer Funktion, die durch ein Menü oder einen Schalter einer Schalterleiste aufgerufen wird.
OnCommandUI Der Funktionsname OnCommandUI steht für den Namen einer Funktion, die durch ein Menü oder einen Schalter einer Schalterleiste aufgerufen wird.
RegisterCommand RegisterCommand trägt ein Kommando für die Benutzerschalterleiste in eine Tabelle ein. Die registrierten Kommandos können über das Dialogfeld Extras=>Benutzerschalterleiste einrichten in die Benutzerschalterleiste eingefügt werden. Ansonsten entspricht die Funktion der Funktion MnSetCommand

id-1362113