Seite 1 von 1
MENU TO nMenuItem
Verfasst: Mo, 23. Nov 2015 16:18
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
Re: MENU TO nMenuItem
Verfasst: Mo, 23. Nov 2015 16:31
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ß.
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
Re: MENU TO nMenuItem
Verfasst: Mo, 23. Nov 2015 17:17
von BenOve
Vielen dank Hubert, Es funktioniert wunderbar !
Gruss Bengt
![angel8 :angel8:](./images/smilies/angel8.gif)
Re: MENU TO nMenuItem
Verfasst: Mo, 23. Nov 2015 18:02
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)
Re: MENU TO nMenuItem
Verfasst: Mo, 23. Nov 2015 21:20
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 ???
Re: MENU TO nMenuItem
Verfasst: Mo, 23. Nov 2015 21:45
von Martin Altmann
BenOve hat geschrieben:Ist diese Herausforderung unlösbar ???
Nö - ist sie nicht.
Die Lösung findest du unter anderem
http://xbaseforum.de/viewtopic.php?f=36&t=8410&p=94541
Viele Grüße,
Martin
Re: MENU TO nMenuItem
Verfasst: Di, 24. Nov 2015 8:05
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)