MenuItem "dynamisch" an/abschalten [ERLEDIGT]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

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

MenuItem "dynamisch" an/abschalten [ERLEDIGT]

Beitrag von Manfred »

Hi,

die Überschrift klingt vielleicht ein wenig komisch, aber irgendwie könnte sie auch passen.

Wenn man eine Menubar, mit entsprechenden Items hat, dann ist es sicherlich sinnvoll, das jeweilige Item zu deaktivieren, wenn darüber ein Programmteil aufgerufen wurde. Das wird ja in der Regel über oMenu:disableItem(nummer) gemacht. Und genauso wieder enabled. Jetzt finde ich es ein wenig blöde, wenn man nun x Einträge hat, diese über die entsprechende Reihenfolgennummer (de)aktiviert, aber mitten im Spiel feststellt, da müssen irgendwie noch ein paar Einträge zwischen. Also heißt es alles neu durchnummerieren. Und das bei jedem Item 2x (de/aktiv).

Im Moment löse ich das so:

Code: Alles auswählen

funktion blahblah(oMenu)

FOR nI := 1 TO oMenu:numItems()
      IF Upper(CharRem("~",oMenu:getItem(nI)[1])) = "BUCHUNGSKONTEN"
          oMenu:disableItem(nI)
          nItem := nI
          EXIT
      ENDIF
NEXT

oMenu:enableItem(nItem)
Geht das von Haus aus nicht irgendwie eleganter? Ich meine, dass man irgendwie abfragen kann, von wo kommst Du? Und jetzt bitte disablen. Ich konnte nichts finden, was wir weitergeholfen hätte.
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: MenuItem "dynamisch" an/abschalten

Beitrag von Tom »

Arbeitest Du nicht mit eXpress++?

Code: Alles auswählen

DCMENUITEM 'Test' PARENT oMenu WHEN {||DasGehtHierGeradeNicht()}
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: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred »

Doch, ich arbeite mit express++ aber ich verstehe Deinen Vorschlag nicht. Kann man über When und Aufruf der Funktion schalten? Ansonsten hatte ich schon mal eine var genommen, die jedesmal .F. oder .T. bekam vor und nach dem Funktionsaufruf, aber das hat mich nicht so sehr vom Hocker gehauen. Mich hat dann interessiert, ob es nicht anders geht. Naja, meine Lösung ist ja nicht der Kracher.

Außerdem habe ich ja mal vor von express++ wegzukommen, dann wäre natürlich eine Alternative wünschenswert
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: MenuItem "dynamisch" an/abschalten

Beitrag von Wolfgang Ciriack »

Außerdem habe ich ja mal vor von express++ wegzukommen
Warum denn ?
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: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred »

Hm,

weil ich mir schon des öfteren Schelte eingefangen habe, dass ich so nicht richtig lernen kann, wie es wirklich klappt.

Und weil ich ein bisschen mehr von der Materie verstehen möchte. Ich baue in einer ruhigen Minute nach und nach alles mit xbase++ pur nach um zu sehen, wie man sowas umsetzen muß.
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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Herbert »

Hi Manfred
Die Frage ist, was erreichst du durch das Disablen? Du willst verhindern, dass die Methode dahinter nicht abläuft.
Ich lass die Menüpunkte bei unwichtigen Dingen aktiv und prüfe in der Methode, ob und was durchgelaufen werden darf.
Z.B. erscheint in einer Messagebox der Standard-Satz: "Bitte zuerst Login und/oder Daten laden" und kehre wieder zurück. Nur bei wichtigen Dingen disable ich.
Nun, letztendlich hast du das Problem ja nur, solange du die Menüpunkte rumschiebst...
Grüsse Herbert
Immer in Bewegung...
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: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred »

Naja,

erstmal möchte ich ein Mehrfachaufrufen dadurch verhindern.

Und während der Entwicklungsphase ist das halt blöde, wenn man "andauernd" die Nummern ändern muß. Man ist ja bestrebt so dynamisch/flexibel wie möglich zu entwickeln, damit man später nur noch fertige Module nehmen und ein wenig anpassen muß.
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von brandelh »

Hallo Manfred,

wenn ich dich recht verstehe, sollte oMenu:setName(nMenuXID) genau das sein was du brauchst.
Später kannst du dann nach nMenuXID suchen und genau dieses Menü erhalten, egal an welcher Stelle es steht.

Auf den Text würde ich auch nicht gehen, das wird bei Änderungen schnell übersehen.
Gruß
Hubert
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: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred »

Hi Hubert,

dann muß ich aber vorher eine feste Nummer vergeben und immer darauf achten, dass ich richtig weiter zähle. Ich finde es schon praktischer, wenn es das System macht und ich dann nur abfrage, wie es gemacht wurde. Und das mit dem Namen war jetzt nur ein Beispiel. Im Zweifelsfalle würde ich mich dann an den Namen der Funktion halten, der steht ja auch in dem :getitem drin. Aber ok, ich sehe, es ist nicht so machbar. Hätte ja mal sein können.
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von brandelh »

Manfred hat geschrieben:Hi Hubert,
dann muß ich aber vorher eine feste Nummer vergeben und immer darauf achten, dass ich richtig weiter zähle.
Ähmm JA, und wo liegt das Problem ? ;-)

Code: Alles auswählen

#define  MENU_DATEI      1
#define  MENU_BEARB      2
#define  MENU_FENSTER    3
...
oMenu:setName(MENU_DATEI)
...
Gruß
Hubert
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: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred »

OK,

etwas weiter ausgeholt. Tom hat ja weiter oben auf express++ hingewiesen. Dort kann ich mit einer when Klausel regeln, ob aktiv oder nicht. Das setzt aber voraus, dass ich z.B. ganz am Anfang entsprechende Vars mitführe. Das hatte ich auch schon mal gemacht, aber es machte mich nicht glücklich.

Aber ich vermute, ich muß es alles nochmals überdenken und dann die einfachste Lösung aus allen hier nehmen.

Wie gesagt, ich wollte nur wissen, ob ich irgendwas übersehen habe. Aber dem war wohl nicht so.

Trotzdem Danke für eure Ideen und Vorschläge.
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten [ERLEDIGT]

Beitrag von brandelh »

Hallo Manfred,

Ich nutze mehrere Instanzvariablen mit Arrays und sammle alle Controls, die ich komplett ab-/anschalten will:

Code: Alles auswählen

     * Jetzt MenüPunkte setzen und HideArrays füllen
      soMenu:setname( MENU_BEARB )
      soMenu:addItem({  "Änderungen aufheben", {|| WinMenu():currentWin:Undo() }  })
      aadd(soMenu:disableEmptyShell, nItemNr)
      nItemNr++
      soMenu:addItem(MENUITEM_SEPARATOR )
      aadd(soMenu:disableEmptyShell, nItemNr)
      nItemNr++
      soMenu:addItem({  "~Suchen ..." , {|| NochNicht() }  })
      aadd(soMenu:disableEmptyShell, nItemNr)
      nItemNr++
      soMenu:addItem(MENUITEM_SEPARATOR )
      aadd(soMenu:disableEmptyShell, nItemNr)
      nItemNr++
      soMenu:addItem({ "Zum ~Anfang"  , {|| WinMenu():currentWin:GoTop() } })
      aadd(soMenu:disableEmptyShell, nItemNr)
      aadd(soMenu:disableTop, nItemNr)
      nItemNr++
      soMenu:addItem({ "~Zurück"+chr(9)+"F7" , {|| WinMenu():currentWin:SkipBack() } })
      aadd(soMenu:disableEmptyShell, nItemNr)
      aadd(soMenu:disableTop, nItemNr)
      nItemNr++
      soMenu:addItem({ "~Vor"   +chr(9)+"F8" , {|| WinMenu():currentWin:SkipNext() } })
      aadd(soMenu:disableEmptyShell, nItemNr)
      aadd(soMenu:disableBottom, nItemNr)
      aadd(soMenu:disableEOF, nItemNr)
      nItemNr++
      soMenu:addItem({ "Zum ~Ende"    , {|| WinMenu():currentWin:GoBottom() } })
      aadd(soMenu:disableEmptyShell, nItemNr)
      aadd(soMenu:disableBottom, nItemNr)
      aadd(soMenu:disableEOF, nItemNr)
      nItemNr++
So kann ich in einer Methode je nach DBF Stellung an und abschalten was ich will.
Wenn man kein aufgebohrtes Framework hat, bietet sich z.B. eine Funktion mit einem STATIC aMenuItems := {} an,
in dem dann aadd( aMenuItems, { "MenuName",oMenuItem } ) hinterlegt wird.
Dann kann man diesen "Namen" suchen und ein Objekt zurückgeben.
Gruß
Hubert
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: MenuItem "dynamisch" an/abschalten [ERLEDIGT]

Beitrag von Manfred »

Hi Hubert,

mir ist gerade noch eine etwas andere Idee gekommen, die werde ich erstmal verfolgen.Mal schauen, was man damit machen kann. Wenn die vielleicht OK ist, werde ich mich nochmal dazu äussern.
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: MenuItem "dynamisch" an/abschalten [ERLEDIGT]

Beitrag von Manfred »

also jetzt werde ich doch langsam porös. Seit xbase++ 2.0 klappt meine Methode von oben nicht mehr.
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