Menueitem dynamisch abschalten

Moderator: Moderatoren

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

Menueitem dynamisch abschalten

Beitrag von Manfred »

Dieses Thema hatte ich schonmal unter GUI gepackt, aber irgendwie werde ich das Gefühl nicht los, das es etwas mit express++ zu tun hat.

Code: Alles auswählen

PROCEDURE main()
          LOCAL getlist        := {}
          LOCAL GetOptions

          LOCAL oDatenBank         := datenbank():new(,,,.T.)
          LOCAL oDialogZusatz      := mk_dialog():new(,,"25.02.2018 ")
          LOCAL oMenu1             := NIL
          LOCAL oMenu2             := NIL

DCSUBMENU oMenu1;
             PARENT oDialogZusatz:oMenuBar;
             PROMPT "D~ienste"

         DCMENUITEM "~Stundenübersicht Fahrer";
             ACTION {|o|o := Thread():new(), o:start({|| stundenusicht(oMenu1)}) };
            MESSAGE "" INTO oDialogZusatz:oMessageBox;
             PARENT oMenu1
             ..................
********************************************************************************************************************
PROCEDURE stundenusicht(oMenu)
          LOCAL getlist        := {}
          LOCAL GetOptions

          LOCAL oDialog       := NIL
          LOCAL oDialogZusatz := dialogStundenUsicht():new(900,1080,"14.11.2017",oSysPara:oHauptDialog)

          MEMVAR oSysPara

          DC_SETKEYACTIVE(.T.)                                                  // damit die F-Tasten wie im textmodus klappen
          oDialogZusatz:deaktiviereMenueItem(,oMenu,"STUNDENÜBERSICHT FAHRER")
          .........
          return
********************************************************************************************************************
METHOD mk_dialog:deaktiviereMenueItem(lAlle,oMenu,cCaption)
       DEFAULT lAlle TO .F.

       FOR ::nI := 1 TO oMenu:numItems()
           IF Upper(CharRem("~",oMenu:getItem(::nI)[1])) == cCaption
              oMenu:disableItem(::nI)
              ::nItem := ::nI
              EXIT
           ENDIF
       NEXT
RETURN
Bis zur Version 1.90xx hat es einwandfrei geklappt. Seit der 2.0 ist es mir durch Zufall aufgefallen, das es nicht mehr klappt. In der For Next wird das Menuitem gefunden und dann deaktiviert. Aber es wird im menue nicht ausgegraut, sondern bleibt anwählbar. Selbst wenn ich von hand oMenu:disablemitem(zahl) eingebe, es bleibt aktiviert. Übersehe ich irgendwas im Express++ System, oder hat sich was geändert in der 2.0er?
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
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Menueitem dynamisch abschalten

Beitrag von Wolfgang Ciriack »

Hast du mal ein kleines Testprogramm ?
Ich benutze die Menüs mit einer WHEN Klausel, da hab ich zwischen 1.9 und 2.0 noch keinen Unterschied festgestellt.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch abschalten

Beitrag von Manfred »

Hi Wolfgang
mit When Klausel stand damals auch zur Debatte, klappt damit auch. Der große Nachteil ist aber, ich muß wieder "sprechende" Variablen mitführen.
Mit einem Beispiel muß ich mal schauen, wie ich das gebacken kriege.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch abschalten

Beitrag von Manfred »

Mit dem Beispiel hapert es. Da steckt zu viel Kram hinter und ich weiß nicht, ob es dann so klappt, wie jetzt.
kann ich denn irgendwie das Klappmenue aufhalten um zu sehen, ob disable funktioniert aber evtl. nur durch irgendeine Nachfolgeroutine von Roger evtl. wieder rückgängig gemacht wird? Das Pulldownmenue schließt ja sofort wieder, sobald der Punkt angewählt wurde.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch abschalten

Beitrag von Manfred »

Jetzt habe ich ATTRIBUTE gefunden, aber das ist es wohl nicht. Alledings würde ich das aus der Erklärung so definieren.
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Menueitem dynamisch abschalten

Beitrag von Tom »

Wenn Du Menüeinträge ausblendest, holt Dir spätestens das nächste DC_GetRefresh() alles wieder rein. Wenn nämlich Menüeinträge kein .F. im WHEN- oder PROTECT-Codeblock zurückliefern, sind sie aktiv, vorhanden und verwendbar, auch wenn sie das vorher nicht waren, weil Du sie abgeschaltet hast. DC_GetWhen(GetList) ist die Funktion, die das macht. Sie wird nicht nur von DC_GetRefresh() aufgerufen, sondern auch zwischendrin, wenn XbParts ihre Inhalte ändern, in ein Browse geklickt wird usw. Da kommst Du auch kaum drumherum. Ich sehe nur zwei Möglichkeiten. Entweder, Du baust Dein Menü direkt (ohne eXpress++) oder Du verwendest WHEN/PROTECT.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch abschalten

Beitrag von Manfred »

so ein Mist. Warum hat das nur bisher unter der 1.90er geklappt? Muß ich wohl in den sauren Apfel beissen... :banghead:
Hm, gibt es denn da genauso eine Möglichkeit wie mit Cargo? Wenn ich disable, dann ermittel ich ja wo der Menuepunkt steht. Kann man das dann nicht auch mit WHEn/Protect machen? Da muß doch auch irgendein wert irgendwo gespeichert sein?
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch abschalten

Beitrag von Manfred »

ich hatte ein ähnliches Problem schonmal mit Pushbutton. Da habe ich dann den CARGo Slot genommen und da "AN" oder "AUS" eingeschrieben (oPb:CARGO[3] = "AUS") . Somit konnte ich dann über die When Klausel eine Abfrage starten und die Pushbutton steuern. Es gibt bei den Menuitems ja auch einen CARGO Slot. Aber wie kann ich dann später ermitteln, wenn ich das da genauso machen möchte wie bei den Pushbuttons? Ich vergebe ja bei den menuitems keinen Objektnamen, den ich übergeben und prüfend durchlaufen kann.
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: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Menueitem dynamisch abschalten

Beitrag von Tom »

Aber Du kannst doch irgendwas in der WHEN-Klausel verwenden, zum Beispiel auch die angezeigte Caption:

Code: Alles auswählen

DCMENUITEM "Statistik 1" PARENT oStatistikMenu ACTION {||Statistik1()} WHEN {||IchDarfGerade("Statistik 1")}

FUNCTION IchDarfGerade(c)
RETURN IF (<xAusDruck>,.T.,.F.)
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch abschalten

Beitrag von Manfred »

haha, ich bin ja etwas schusselig. Wir haben ja nächste Woche Forentreffen........... :badgrin:
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!!
DelUser01

Re: Menueitem dynamisch abschalten

Beitrag von DelUser01 »

Hallo Manfred

ich mach das so:
beim Generieren des Menü schreibe ich in ein Array allenotwendigen Infos zu diesem neuen MenuItem. Natürlich auch die Item-Nr., auch die ItemNr welche bei oMnu:AddItem() zurückgegeben wird.

Sollen jetzt ein MenuItem aktiviert/deaktiviert (versteckt?) werden kann suche ich die betroffenen ItemNr z.B. mit aScan und vergleiche die im Array abgelegten Item-Informationen. Die gefundenen ITems kann ich dann mit der ItemNr aktivieren/deaktivieren. Das kann ein Item sein oder gleich mehrere.
Dazu habe ich mir ein paar kleine Funktionen geschrieben.

Dem MenüItem gebe ich nur wenig Informationen mit. Die eigene Konfiguration und was passieren soll wenn das Item angeklickt wird kommt immer aus dem Array. Somit kann ich viele Parameter während der Laufzeit am Menü ändern.

(Ist aber nicht der einfachste Weg...)
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Menueitem dynamisch abschalten

Beitrag von Manfred »

Hi Roland,
das es verschiedene Wege gibt ist klar. Ich hatte einen Weg gefunden, der unter 1.90 noch klappte, aber jetzt unter 2.0 nicht mehr klappt. Außerdem geht es hier speziell um express++
Aber wie schon erwähnt, ich werde das mal nächste Woche versuchen zu klären.
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!!
DelUser01

Re: Menueitem dynamisch abschalten

Beitrag von DelUser01 »

Manfred hat geschrieben: Do, 12. Apr 2018 19:15Außerdem geht es hier speziell um express++
Sorry - habe ich übersehen
Antworten