home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Inside Multimedia 1995 August
/
IMM0895.ISO01.iso
/
magazin
/
optix
/
disk1
/
optxppac.set
/
MENUE.OPT
< prev
next >
Wrap
Text File
|
1995-03-22
|
8KB
|
393 lines
def(x)
def(y)
def(i)
def(j)
def(flag)
def(dum1)
def(dum2)
def(dum3)
def(dum4)
def(back)
defs(dum$)
defs(dum1$)
defs(dum2$)
defs(text$,'')
defs(dither$,'')
defs(char$,'')
def(taste)
def(index%)
def(index2%)
def(start%,1)
def(start2%,9)
def(anzahl%,7)
def(anzahl2%,4)
defaw(mflag&,30)
defas(mfeld$,30,30)
rem Textfeld einrichten
include('dither.inc')
procedure checktaste
taste:=readkey
back:=0
if taste=left
dec(x,5)
endif
if taste=right
inc(x,5)
endif
if taste=up
dec(y,5)
endif
if taste=down
inc(y,5)
endif
if taste>0
cursmove(x,y)
endif
if taste=13
back:=-1
endif
return
procedure max(wert,max)
rem liefert i.d.Global 'back' den größeren der beiden Werte (wert od. max)
back:=wert
if wert<=max
back:=max
endif
return
procedure min(wert,min)
rem liefert i.d.Global 'back' den kleineren der beiden Werte (wert od. min)
back:=wert
if wert>=min
back:=min
endif
return
procedure menue(pm1,mmx,mxl,myo,mxr,myu)
rem
rem ###############################################
rem
rem 'MENUE' erzeugt ein bewegliches Menü (POPUP od. PULLDOWN).
rem
rem ################################################
rem
rem Pm1 = Index des Menüpunktes (Textfeldindex), der an erster
rem Stelle erscheinen soll. Die Texte müssen ab Index 0
rem im Textfeld stehen.
rem Mmx = Anzahl der Menüpunkte, die ab 'Pm1' dargestellt
rem werden sollen. Der Menü-Index liegt immer im
rem Bereich von 1 bis 'Mmx%'.
rem Mxl, Myo, Mxr, Myu
rem = Rahmenkoordinaten, innerhalb derer das Menü dargestellt
rem werden soll. Passt das Menü nicht in den Rahmen, liegt
rem die linke, obere Ecke des Menüs immer auf der
rem linken, oberen Ecke des Rahmens.
rem
rem Die globale Rückgabevariable 'return' enthält nach Abschlu₧
rem den Index des gewählten Menüpunktes im Textfeld (Index
rem des Punktes im aktuellen Menü plus Startindex 'Pm1' !).
rem
rem Im numerischen Parallelfeld 'mflag' muß für jeden Menü-
rem Eintrag ein Flag gesetzt sein (=1), ob er aktiv (wählbar)
rem sein soll. Falls nicht, wird der Punkt inaktiv (grau)
rem dargestellt. Dieser Menüpunkt kann dann nicht angewählt werden.
rem
rem Nach Rückkehr ist Sysfont 3 eingestellt
locals(msk,xkox,ykoy,yi,mi,mxl2,mxr2,myo2,myu2)
for mi:=0 To mmx-1 do
dum$:=mfeld$[mi+Pm1]
len(dum$,msk)
max(msk,back)
next(mi)
msk :=mousek
xkox:=mousex
if msk=2
mxl2:=xkox-(back*8+20*2)/2
else
mxl2:=xkox
endif
bound(mxl2,mxl,mxr-back*8-20*2)
mxr2:=mxl2+back*8+20*2
if msk=2
myo2:=mousey-10
else
myo2:=myo
endif
bound(myo2,myo,myu-18+mmx*18)
myu2:=myo2+(18+mmx*18)
min(mxl,mxl2)
mxl:=back
min(myo,myo2)
myo:=back
scrtobuf
cursoff
viewport(mxl2,myo2,mxr2,myu2)
rem *** cbox(8,8,0) // 'einpixeln' ***
cbox(0,8,0)
decviewport
plateau(7,0)
viewport(mxl2+6,myo2+6,mxr2-6,myu2-6)
cbox(0,1,0)
plateau(0,9)
setbcolor(0)
setcolor(15)
sysfont(1,1)
for mi:=0 to mmx-1 do
viewport(mxl2+13,myo2-6+mi*18+17,mxr2-13,myo2+6+mi*18+18)
cbox(0,7,0)
setcolor(15)
plateau(15,0)
if mflag&[mi+pm1]=on
setcolor(15)
printat(mxl2+21,myo2+mi*18+13,mfeld$[mi+pm1])
setcolor(1)
printat(mxl2+22,myo2+mi*18+14,mfeld$[mi+pm1])
else
setcolor(8)
printat(mxl2+22,myo2+mi*18+14,mfeld$[mi+pm1])
endif
next(mi)
setcolor(12)
sysfont(3,0)
curson(mousex,mousey)
repeat
x:=mousex
y:=mousey
checktaste
xkox:=mousex
ykoy:=mousey
msk:=mousek
max(1,(ykoy-(myo2-8))/18)
yi:=back
flag:=0
inbox(mxl2+12,myo2-8,mxr2-13,myu2-6,dum1)
if dum1=true
if yi<=mmx
flag:=1
if mflag&[yi+pm1-1]=on
cursoff
noise(190,0)
viewport(mxl2+13,myo2-7+yi*18,mxr2-13,myo2+6+yi*18)
cbox(13,0,0)
copywin(mxl2+15,myo2-6+yi*18,mxr2-16,myo2+3+yi*18)
loadwin(mxl2+16,myo2-5+yi*18,8,10)
curson(mousex,mousey)
endif
repeat
checktaste
msk:=mousek
if back:=-1
msk:=1
endif
if mousex<mxl2+12
msk:=-1
endif
if mousex>mxr2-13
msk:=-1
endif
back:=(mousey-(myo2-8))/18
if yi<>back
msk:=-1
endif
until msk<>0
:menurepeat2exit
if mflag&[yi+pm1-1]=on
cursoff
viewport(mxl2+13,myo2-7+yi*18,mxr2-13,myo2+6+yi*18)
cbox(13,0,0)
copywin(mxl2+16,myo2-4+yi*18,mxr2-15,myo2+4+yi*18)
loadwin(mxl2+15,myo2-5+yi*18,8,10)
curson(mousex,mousey)
else
msk:=0
endif
endif
endif
if flag=0
yi:=0
endif
inbox(mxl2,myo2,mxr2,myu2,flag)
if flag=0
if mousek>0
rem // EXIT, nur falls Mausklick außerhalb
goto('menurepeat1exit')
endif
endif
if msk>0
if yi>0
if yi<=mmx
goto('menurepeat1exit')
endif
endif
endif
until mousek=2
:menurepeat1exit
mi:=yi
max(mxl2,0)
dum1:=back
max(myo2,0)
dum2:=back
min(mxr2,639)
dum3:=back
min(myu2,479)
dum4:=back
cursoff
back:=mi-1
viewport(dum1,dum2,dum3,dum4)
rem *** restorebox(8,0) // 'auspixeln' ***
restorebox(0,0)
curson(mousex,mousey)
return
begin
readfont(1,'hel15x29.fnt')
font(1)
new(mfeld$)
new(mflag&)
rem *** 'aktiviert'-Flags setzen
for i:=1 to 30 do
mflag&[i]:=1
next(i)
mflag&[1] :=0
mflag&[5] :=0
mflag&[6] :=0
mflag&[8] :=0
mflag&[9] :=0
mflag&[10]:=0
rem *** Textfeld-Einträge setzen
mfeld$[1] :='----------'
mfeld$[2] :='SPEICHERN'
mfeld$[3] :='LADEN'
mfeld$[4] :='LÖSCHEN'
mfeld$[5] :='KOPIEREN'
mfeld$[6] :='----------'
mfeld$[7] :='QUIT'
mfeld$[8] :='----------'
mfeld$[9] :='Testmenü2'
mfeld$[10]:='-------------'
mfeld$[11]:='Irgendwas1'
mfeld$[12]:='Irgendwas2'
clearscreen(4)
dither(0,20,120,7,16,3)
copywin(20,120,23,310)
for i:=0 to 7 do
loadwin(24+i*4,120,0,0)
next(i)
copywin(20,120,51,310)
for i:=0 to 17 do
loadwin(52+32*i,120,0,0)
next(i)
textcolor(0)
textbcolor(8)
setcolor(15)
setbcolor(0)
viewport(20,120,628,312)
plateau(15,0)
incviewport
plateau(15,0)
textcofs(2)
writestyle(3)
textshadow(3,3)
printc(320,180,'PopUp/PullDown-Menu')
viewport(220,215,338,245)
cbox(0,7,0)
plateau(15,0)
printc(280,230,'Menu 1')
viewport(340,215,480,245)
cbox(0,7,0)
plateau(15,0)
printc(410,230,'Menu 2')
curson(mousex,mousey)
x:=mousex
y:=mousey
font(0)
sysfont(3,1)
setcolor(0)
printc(320,202,'(rechte Maustaste=POPUP)')
setcolor(15)
repeat
repeat
checktaste
inbox(340,215,480,245,dum1)
if dum1=true
menue(start2%,anzahl2%,340,215,480,245)
index2%:=back
endif
inbox(220,215,338,245,dum1)
if dum1=true
menue(start%,anzahl%,220,215,338,245)
index%:=back
endif
if mousek=2
menue(start%,anzahl%,mousex,mousey,mousex,mousey)
index%:=back
endif
until index%>0
if index%+start%=2
mflag&[index%+start%+1]:=on
mflag&[index%+start%]:=off
printat(1,1,'gewählt: Speichern ')
endif
if index%+start%=3
mflag&[index%+start%]:=off
mflag&[index%+start%-1]:=on
printat(1,1,'gewählt: Laden ')
endif
if index%+start%=4
printat(1,1,'gewählt: Löschen ')
endif
if index%+start%=5
printat(1,1,'gewählt: Kopieren ')
endif
if index%+start%=7
printat(1,1,'gewählt: Quit ')
endif
str(index%,3,dum$)
printat(1,32,'Menüindex : '+dum$)
until (index%+start%)=7
end