Atom Nieuws 1999 nummer 1                     
../../../images/back.gif ../../../images/exit.gif ../../../images/forward.gif
pagina 24 t/m 26
Atomic Windows
Voorbeeld programmeren in AW: Pulldown menu’s

Inleiding:

Ik denk dat iedereen in dit Windows-tijdperk de kreet pulldown menu's wel kent maar toch wil ik hier iets verder op ingaan. Het begint namelijk met een menu-balk waarop een aantal commando's staan. Wanneer op een van deze commando's geklikt wordt verschijnt er een nieuw menu met daarin alleen commando's die betrekking hebben met het voorgaande gekozen commando. Door deze structuur kun je dus vrij snel een commando gevonden krijgen. In dit voorbeeld komt het commando DLGOPTION veelvuldig aan bod.

Doel:

Het doel is om op een vrij eenvoudige manier gebruik te kunnen maken van pulldown menu's voor het kiezen van commando's op de Atom, in combinatie met Atomic Windows.

Principe:

Het programma is vrij simpel van opzet. Als eerste begin je met het plaatsen van de commandos in de menubalk met het DLGOPTION commando (FUNCTION MENU). Wanneer er op een commando geklikt wordt, wordt een procedure SUBxxx opgeroepen welke het submenu plaatst met wederom het DLGOPTION commando. Deze manier kan eindeloos (tot het geheugen vol is) uitgebreid worden.Verder is er ook nog een optie ingebracht om een commando wel/niet selecteerbaar te maken.
In dit voorbeeld heb ik een functie MENU gebruikt om een menukeuze te maken. De aanroep van deze functie springt in een menu-loop, net zolang totdat er een keuze gemaakt is waardoor er verder actie moet worden ondernomen.
Het commando 'File' laat een menustructuur zien en het commando 'Set/Reset' is bedoeld om de commando’s onder het commando 'File' wel of niet selecteerbaar te maken.
Het scherm ziet er als volgt uit:

awvb2-1.gif

PROC INIT:

Hier wordt een en ander geinitialiseerd voor AW. De array S bevat voor elk submenu 1 byte waarvan elk bit de lockstatus van het commando voorsteld. Wanneer dit bitje 1 is dan is het commando gelocked en wordt dan grijs weergegeven waardoor het niet selecteerbaar is. Wanneer dit bitje 0 is dan wordt het commando normaal weergegeven en is dan selecteerbaar.

FUNCTION MENU:

Deze functie plaatst een menubalk op het scherm net onder de kop van het window. Afhankelijk van welk commando gekozen wordt, wordt het bijbehorende submenu opgeroepen. De exitcode van het laatst gekozen commando is de waarde die de functie MENU krijgt.

PROC SUBFILE:

In deze procedure wordt het submenu FILE geplaatst. Dit submenu bevat 3 commandos waarvan het commando LOAD weer een submenu heeft.
?S bevat de status van de lockbitjes voor dit menu.

PROC SUBTOGGLE:

Deze procedure laat alle commando's zien die gekozen kunnen worden. Voor elk commando staat het lockbitje aangegeven. Een klik op het commando verandert het lockbitje.

PROC SUBLOAD:

In deze procedure wordt een submenu voor het commando LOAD geplaatst.
S?1 bevat de status van de lockbitjes voor dit menu.

De listing van het programma staat hieronder:

10 PROGRAM PULLDOWN MENU
20
30 DIM S4,V32
40
50 PROC INIT
60 !S=0
70 DLGBASE#7000
80 *D.
90 *LOAD PDFONT
100 CLEAR4
110 DLGCLS
120 DLGPO.0
130 PEND
140
150 FUNCTION MENU
160 DLGCR.A,"Pulldown Menu's",40,1,1,30,20
170 DLGLA." ",4,0,2
180 DLGOPT.1,"File",4,0,2
190 DLGOPT.2,"Set/Reset",4,5,2
200 DLGOPT.3,"Stop",4,26,2
210 DLGEND
220 IF A=1;SUBFILE
230 IF A=2;SUBTOGGLE
240 IF A<>3;G.130
250 MENU=B
260 FEND
270
280 PROC SUBFILE
290 DLGLA."File",12,0,2
300 DLGCRE.B,"",0,1,4,6,4
310 DLGOP.11," Save ",((?S&1>0)*16),0,0
320 DLGOP.12," Load>",((?S&2>0)*16),0,1
330 DLGOP.13," Copy ",((?S&4>0)*16),0,2
340 DLGOP.14," Exit ",0,0,3
350 DLGEND
360 IF B=12;SUBLOAD
370 PEND
380
390 PROC SUBTOGGLE
400 DLGLA."Set/Reset",8,5,2
410 DLGCR.B,"",0,6,4,9,7
420 $V=" Save ";V?1=8-(?S&1>0);DLGOPT.21,$V,0,0,0
430 $V=" Load ";V?1=8-(?S&2>0);DLGOPT.22,$V,0,0,1
440 $V=" Copy ";V?1=8-(?S&4>0);DLGOPT.23,$V,0,0,2
450 $V=" File ";V?1=8-(S?1&1>0);DLGOPT.24,$V,0,0,3
460 $V=" Text ";V?1=8-(S?1&2>0);DLGOPT.25,$V,0,0,4
470 $V=" Block ";V?1=8-(S?1&4>0);DLGOPT.26,$V,0,0,5
480 DLGOPT.27," Exit ",0,0,6
490 DLGEND
500 IF B=21;?S=?S:1
510 IF B=22;?S=?S:2
520 IF B=23;?S=?S:4
530 IF B=24;S?1=S?1:1
540 IF B=25;S?1=S?1:2
550 IF B=26;S?1=S?1:4
560 PEND
570
580 PROC SUBLOAD
590 DLGLA." Load>",8,0,1
600 DLGCR.B,"",0,7,5,7,4
610 DLGOPT.121," File ",((S?1&1>0)*16),0,0
620 DLGOPT.122," Text ",((S?1&2>0)*16),0,1
630 DLGOPT.123," Block ",((S?1&4>0)*16),0,2
640 DLGOPT.124," Exit ",0,0,3
650 DLGEND
660 PEND
670
680 INIT
690 X=MENU
700 $V="Uw keus was: "
710 V?12=(X/100)+48
720 V?13=(X/10)%10+48
730 V?14=(X%10)+48
740 DLGLA.$V,32,7,9
750 END

Zo, weer een artikel in de reeks 'Voorbeeld programmeren in AW'. De volgende keer weer meer. Tot schrijvens!!!

Kees van Oss

../../../images/back.gif ../../../images/exit.gif ../../../images/forward.gif