MenuItem "dynamisch" an/abschalten [ERLEDIGT]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

MenuItem "dynamisch" an/abschalten [ERLEDIGT]

Beitrag von Manfred » Di, 25. Jan 2011 18:40

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7290
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Tom » Di, 25. Jan 2011 18:47

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: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred » Di, 25. Jan 2011 18:51

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2424
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Wolfgang Ciriack » Di, 25. Jan 2011 20:03

Außerdem habe ich ja mal vor von express++ wegzukommen
Warum denn ?
Viele Grüße
Wolfgang

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred » Di, 25. Jan 2011 20:08

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1909
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Herbert » Di, 25. Jan 2011 20:13

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: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred » Di, 25. Jan 2011 20:18

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von brandelh » Mi, 26. Jan 2011 1:18

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: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred » Mi, 26. Jan 2011 8:13

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: MenuItem "dynamisch" an/abschalten

Beitrag von brandelh » Mi, 26. Jan 2011 8:26

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: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: MenuItem "dynamisch" an/abschalten

Beitrag von Manfred » Mi, 26. Jan 2011 8:33

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14549
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

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

Beitrag von brandelh » Mi, 26. Jan 2011 8:43

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: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

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

Beitrag von Manfred » Mi, 26. Jan 2011 8:48

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18048
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

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

Beitrag von Manfred » Fr, 23. Feb 2018 18:04

also jetzt werde ich doch langsam porös. Seit xbase++ 2.0 klappt meine Methode von oben nicht mehr.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Antworten