Menueitem dynamisch hinzufügen/wegnehmen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21197
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Menueitem dynamisch hinzufügen/wegnehmen

Beitrag von Manfred »

Hi,

ich probiere gerade ein Menuitem in einem Menubar hinzuzufügen. Das klappt auch, aber wenn ich dann das Menue herunterklappen will, dann kommt eine Fehlermeldung, die auf eine fehlerhafte Arrayindizierung hinweist. Das ist auch verständlich, weil ich ja im Betrieb einen Eintrag hinzufüge. Es gibt sicherlich irgendeine Funktion unter express++ mit der man das korrigieren kann, nach einem :insItem(). Ich kann aber nichts finden.

kann mir jemand auf die Sprünge helfen?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Menueitem dynamisch hinzufügen/wegnehmen

Beitrag von Tom »

Hallo, Manfred.

Ich arbeite mit DelItem() und AddItem(), um bestimmte Menüs, die mit eXpress++ erzeugt wurden, benutzerbezogen zu aktualisieren. Das funktioniert einwandfrei.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21197
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch hinzufügen/wegnehmen

Beitrag von Manfred »

Hi Tom,

mit additem habe ich es ja anfänglich probiert, aber dann wird es ja immer hinten angefügt. Dort steht aber schon ein Eintrag "Beenden". Außerdem wollte ich die neuen Einträge zwischen Seperatoren setzen, die auch schon vorhanden sind. Aber eigentlich hast Du Recht. Dann packe ich die offenen Programme einfach hinter Beenden. Ist ja egal....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Menueitem dynamisch hinzufügen/wegnehmen

Beitrag von Tom »

Hallo, Manfred.

Ich wollte eigentlich darauf hinaus, dass es auch mit InsItem() funktionieren müsste. Zeig mal ein bisschen Code.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21197
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch hinzufügen/wegnehmen

Beitrag von Manfred »

Hm,

biddeschöön

Code: Alles auswählen

#include "appevent.ch"
#include "dcdialog.ch"
#include "dcgra.ch"
#include "main.ch"
#include "nls.ch"
#include "xbp.ch"
#include "q:\include\inkey.ch"

#pragma Library( "XBTBASE1.LIB")                                                // wird dadurch in keinem
#pragma Library( "XBTBASE2.LIB")                                                // Projektfile mehr benötigt als Angabe
#pragma Library( "XppUI2.lib" )                                                 // für den XbpPrintDialog()
#pragma Library( "dclipx.lib" )

#pragma Library ("q:\zusaetze_gui\allgemein\mk_zusaetze.lib")
********************************************************************************
PROCEDURE appsys()
          RETURN
********************************************************************************
PROCEDURE main()
          LOCAL getlist           := {}
          LOCAL GetOptions

          LOCAL oDateiMenu        := NIL
          LOCAL oHilfeMenu        := NIL
          LOCAL oMenu1            := NIL
          LOCAL oMenuBar          := NIL
          LOCAL oSeparator        := NIL

          MEMVAR oHauptDialog
          MEMVAR oMessage
          MEMVAR oPruefen
          MEMVAR oSysPara

          oMessage := nachricht():new()
          oPruefen := pruefen():new()
          oSysPara := systemParameter():new()

          SetLocale( NLS_ICURRENCYEURO, "1" )
          SetLocale( NLS_SCURRENCY, Chr(213) )

          DCMENUBAR oMenuBar;
                 ID 999;
          OWNERDRAW;
              TITLE "Menuebar"
//------------------------------------------------------------------------------
          DCSUBMENU oDateiMenu;
             PARENT oMenuBar;
             PROMPT "~Datei";
              TITLE "Datei"

         DCMENUITEM oSeparator;
             PARENT oDateiMenu;
          SEPARATOR

         DCMENUITEM oSeparator;
             PARENT oDateiMenu;
          SEPARATOR

         DCMENUITEM "~Beenden";
             ACTION {|| IF(AppQuit("",.T.,"Programmende"),DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList),NIL)};
             PARENT oDateiMenu;
              TITLE "Beenden"
//------------------------------------------------------------------------------
          DCSUBMENU oMenu1;
             PARENT oMenuBar;
             PROMPT "~Menue1";
              TITLE "Menue1"

         DCMENUITEM "~Unterprogramm";
             ACTION {|| pruefeFenster(oDateiMenu,"neu"),unterprogramm(),pruefeFenster(oDateiMenu,"loeschen") };
             PARENT oMenu1;
              TITLE "Unterprogramm"
//------------------------------------------------------------------------------
          DCSUBMENU oHilfeMenu;
             PARENT oMenuBar;
             PROMPT "~Hilfe";
              TITLE "Hilfe"

         DCMENUITEM oSeparator;
             PARENT oHilfeMenu;
          SEPARATOR

         DCMENUITEM "~Info";
             ACTION {|| info() };
             PARENT oHilfeMenu;
              TITLE "Info"
//------------------------------------------------------------------------------
       DCGETOPTIONS;
         ABORTQUERY MSG {|| AppQuit("",.T.,"Programmende mit ESC") };
         AUTORESIZE;
             BORDER XBPDLG_SIZEBORDER;
         CLOSEQUERY MSG {|| AppQuit("",.T.,"Programmende über X-Button") };
               ICON ICON_APPLICATION;
              PIXEL;
              TITLE TokenUpper(SubStr(oSysPara:cProgrammName,1,Rat(".",oSysPara:cProgrammName)-1)) + " Benutzer:"

         DCREAD GUI;
               EVAL {||oHauptdialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED)};
            OPTIONS GetOptions;
             PARENT @oHauptDialog

          RETURN
********************************************************************************
PROCEDURE info()
          RETURN
********************************************************************************
PROCEDURE pruefeFenster(oDateiMenu,lModus)
          IF Upper(lModus) == "NEU"
             oDateiMenu:insItem(2,{"~Menue1",NIL,0,XBPMENUBAR_MIA_OWNERDRAW})
             altd()
          ELSE
             altd()
          ENDIF
          RETURN
********************************************************************************
Sobald ich auf Datei klicke, knallt es mit besagter Meldung.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten