MENU TO nMenuItem

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
BenOve
Rookie
Rookie
Beiträge: 18
Registriert: Fr, 18. Sep 2015 14:24
Wohnort: Hestra Schweden

MENU TO nMenuItem

Beitrag von BenOve »

In ein Menu ist en möglich auch ein Message zu zeigen
je nach Bewegung

Wäre es möglich statt Message ein Funktion zu starten.

Code: Alles auswählen

@ 0, 1 PROMPT " xxx "      MESSAGE "1111" 
@ 1, 1 PROMPT " yyy "      MESSAGE "2222" 
MENU TO nMenuItem
Was ich erreichen möchte ist ein jpg zu zeigen je nach Menu Bewegung
aber befor eine endgültige Wahl gemacht ist

Gruss Bengt
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: MENU TO nMenuItem

Beitrag von brandelh »

ich schrieb schon ...
ich denke nicht dass man das mit MENU TO machen kann, das alte Clipper Menü ist da etwas eingeschränkt.
... aber ein Blick ins Handbuch der 1.90.355 zeigt folgendes:
@ <nRow>, <nCol> PROMPT <cMenuItem> [MESSAGE <bcMessage>]
Parameter
<nRow>
<nRow> bestimmt die Bildschirmzeile, an der der Menüpunkt ausgegeben wird.
<nCol>
<nCol> bestimmt die Bildschirmspalte, an der der Menüpunkt ausgegeben wird.
PROMPT <cMenuItem>
<cMenuItem> ist eine Zeichenkette, die als Menüpunkt angezeigt wird.
MESSAGE <bcMessage>
<bcMessage> ist eine Zeichenkette, die als Meldung in der durch SET MESSAGE definierten Bildschirmzeile ausgegeben wird, wenn der Menüpunkt ausgewählt ist.
Anstelle einer Zeichenkette kann für <bcMessage> ein Codeblock angegeben werden, der eine Zeichenkette zurückgeben muß.

Code: Alles auswählen

@ ... Prompt "Erstes Menü"
könnte man also auch so schreiben:

Code: Alles auswählen

@ ... Prompt "Erstes Menü" MESSAGE {|| ZeigeInfo(1), "Info Erstes Menü"  }
der letzte Wert wird vom Codeblock zurückgegeben, aber die Funktion davor ausgeführt !

oder die Funktion kümmert sich gleich um den richtigen Text ...

Code: Alles auswählen

@ ... Prompt "Erstes Menü" MESSAGE {|| ZeigeInfo(1) }
function ZeigeInfo(nMenuWert)
    local cInfo
    do case
        case nMenuWert = 1
               cInfo := "Info Erstes Menü"
               ZeigeBild( ... )
...
return cInfo
Gruß
Hubert
Benutzeravatar
BenOve
Rookie
Rookie
Beiträge: 18
Registriert: Fr, 18. Sep 2015 14:24
Wohnort: Hestra Schweden

Re: MENU TO nMenuItem

Beitrag von BenOve »

Vielen dank Hubert, Es funktioniert wunderbar !
Gruss Bengt :angel8:
Benutzeravatar
BenOve
Rookie
Rookie
Beiträge: 18
Registriert: Fr, 18. Sep 2015 14:24
Wohnort: Hestra Schweden

Re: MENU TO nMenuItem

Beitrag von BenOve »

Statt jede Prompt für sich zu schreiben möchte ich alles mit ein array aARR hereinführen
Aber wenn der Array zB 19 String Elemente hat , dann meldet ZeigeInfo(N) immer N=19
auch wenn Menu am Zeile 1 ist
Hier muss Syntax anscheint anderes aussehen. Was mache in falsch ??

Code: Alles auswählen

   FOR N=1 TO LEN(aARR)
    @ N,0  PROMPT aARR[N] MESSAGE {|| ZeigeInfo(N) }
    NEXT N
    MENU TO nMenuItem


function ZeigeInfo(nMenuWert)
 @0,0 say REPLICATE( STR(nMenuWert,2,0),10)
RETURN STR(nMenuWert,10,0)
Benutzeravatar
BenOve
Rookie
Rookie
Beiträge: 18
Registriert: Fr, 18. Sep 2015 14:24
Wohnort: Hestra Schweden

Re: MENU TO nMenuItem

Beitrag von BenOve »

Hier einige Idéen probiert ohne Riesen Erfolg

Prompt mit Array funktioniert OK aber passt sich an LEN(aARR) nicht an

Code: Alles auswählen

      N=1;  @ N,0  PROMPT aARR[N]  MESSAGE {|| ZeigeInfo(1) }
      N=2;  @ N,0  PROMPT aARR[N]  MESSAGE {|| ZeigeInfo(2) }
      N=3;  @ N,0  PROMPT aARR[N]  MESSAGE {|| ZeigeInfo(3) }
     MENU TO nMenuItem

Ich habe nachgeguckt was der PreProcessor macht und dann mit CodeBlock probiert
Funktioniert nicht

Code: Alles auswählen

  bBlock := {|N| _AtPrompt(N, 0, aARR[N], promptList, {|| ZeigeInfo(N) }) }
      ? Eval(bBlock, 1)
      ? Eval(bBlock, 2)
      ? Eval(bBlock, 3)
    nMenuItem := _MenuTo(PromptList, nMenuItem, UPPER("nMenuItem"))
Macro Operator geht nicht

Code: Alles auswählen

cSTR:="_AtPrompt(N, 0, aARR[N], promptList, {|| ZeigeInfo(N) })"
FOR N=1 TO 9
x:=&cSTR
NEXT N
    MENU TO nMenuItem
Ist diese Herausforderung unlösbar ???
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: MENU TO nMenuItem

Beitrag von Martin Altmann »

BenOve hat geschrieben:Ist diese Herausforderung unlösbar ???
Nö - ist sie nicht.
Die Lösung findest du unter anderem :arrow: http://xbaseforum.de/viewtopic.php?f=36&t=8410&p=94541

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
BenOve
Rookie
Rookie
Beiträge: 18
Registriert: Fr, 18. Sep 2015 14:24
Wohnort: Hestra Schweden

Re: MENU TO nMenuItem

Beitrag von BenOve »

Vielen Dank, Martin
Zwar immer noch ein bisschen rätselhaft warum es funktioniert,
aber es funktioniert tatsächlich wunderbar.

Code: Alles auswählen

FOR N=1 TO LEN(aARR)
      @ N,0  PROMPT aARR[N]  MESSAGE makeblock(N)
NEXT N
MENU TO nMenuItem

function makeblock(N)
return   {|| ZeigeInfo(N) }

function ZeigeInfo(nMenuWert)
    @0,0 say REPLICATE( STR(nMenuWert,2,0),10)  // Hier kann sich allerlei abspielen innerhalb Menu-Bewegung
RETURN STR(nMenuWert,10,0)
Antworten