Atomic Windows Voorbeeld programmeren in AW: Tips & trucs
In onderstaand verhaal staan enkele
bruikbare tips en trucs beschreven voor problemen die ik ben
tegengekomen tijdens het programmeren in Atomic Windows. Alle beschreven programmas
gebruiken de file AWFONT waarin de gebruikte font- en iconentabel
zit. Deze file staat ook op de disk.
Verticale instelbare schuifbalk:
|
Het is wel eens makkelijk om een bepaalde instelling te doen
of een variabele te wijzigen dmv het verschuiven van een blokje in
een schuifbalk. |
Truc: Dit kan ook in Atomic
Windows door gebruik te maken van de AW karakters code 0-10 (11-31
zijn nog leeg). Dit zijn namelijk de karakters die AW gebruikt om
specifieke AW objecten op het scherm te plaatsen. Welk karakter bij
welke code hoort staat hieronder:
Karakter
om schaduw in een DLGPUSHBUTTON te creëren
#01,#01,#01,#01,#01,#01,#01,#01 ; VERT.LIJN 00
Karakters
om een schuifbalk in de DLGLISTBOX te creëren
#FF,#80,#80,#80,#80,#80,#80,#FF ; SCHUIFKNOP 01
#80,#88,#9C,#BE,#9C,#9C,#80,#FF ; SCHUIFBALKPIJL HOOG 02
#FF,#80,#9C,#9C,#BE,#9C,#88,#80 ; SCHUIFBALKPIJL LAAG 03
#AA,#D5,#AA,#D5,#AA,#D5,#AA,#D5 ; MIDDEN SCHUIFRASTER 04
Karakters om een DLGRADIOBUTON te creëren
#3C,#42,#99,#BD,#BD,#99,#42,#3C ; RADIOBUTTON VOL 05
#3C,#42,#81,#81,#81,#81,#42,#3C ; RADIOBUTTON LEEG 06
Karakters om een DLGCHECKBOX te creëren
#FE,#C6,#AA,#92,#AA,#C6,#FE,#00 ; CHECKBOX VOL 07
#FE,#82,#82,#82,#82,#82,#FE,#00 ; CHECKBOX LEEG 08
Karakters om een kader met vakjes te creëren
#00,#01,#00,#01,#00,#01,#00,#55 ; LEGE RUIT VULPATROON 09
#FE,#FF,#FE,#FF,#FE,#FF,#FE,#55 ; INV. RUIT VULPATROON 10
Ik
heb een procedure gemaakt om de schuifbalk te plaatsen. De aanroep
van de procedure is als volgt: BALK ( MIN, MAX, WAARDE, X-POS,
Y-POS, H). Eerst plaatsen we een
lege verticale schuifbalk met pijltjes op positie X_POS, Y_POS met
hoogte H op het scherm. Daarna berekenen we de positie van de
schuifknop met behulp van de waardes MIN, MAX, WAARDE, H en Y-POS. Nu
plaatsen we de schuifknop. Het enigste wat we nog moeten doen is
kijken wanneer er met de muis op een pijltje gedrukt wordt om de
waarde + positie schuifknop dan aan te passen. Dit doe ik d.m.v. het
DLGHOTSPOT commando op positie X-POS,Y-POS met breedte 1 en hoogte H.
Programma: Het programma ziet er dan als volgt uit:
10 PROGRAM SCHUIFBALK
20
30 DIM V64
40 *LO.AWFONT 7000
50 A=0 ;REM LAAGSTE WAARDE
60 B=9 ;REM HOOGSTE WAARDE
70 C=(B+A)/2 ;REM HUIDIGE WAARDE
80 H=15 ;REM HOOGTE BALK
90
100 PROC BALK(A,B,C,X,Y,H)
110
DLGFRAME ,0,X,Y,1,H ;REM KADER OM SCHUIFBALK
120 $V=
130 ?V=2;DLGLABEL $V,0,X,Y ;REM PLAATS PIJL HOOG
140
?V=3;DLGLABEL $V,0,X,(Y+H) ;REM PLAATS PIJL NEER
150 ?V=4
160 F.I=1 TO H-2
170 DLGLABEL $V,0,X,(Y+I) ;REM PLAATS RASTER
180 N.
190 P=((C-A)*(H-3))/(B-A)+Y+1 ;REM BEREKEN POSITIE KNOP
200 ?V=1;DLGLABEL $V,0,X,P ;REM PLAATS KNOP
210 PEND
220
230 CLEAR4;DLGCLS;DLGPOINTER 0 ;REM SCHERM SCHOON
240 DLGBASE #7000
250 DLGCREATE Q,Schuifbalk Demo,104,6,1,20,22;
REM PLAATS LEEG VENSTER
260 DLGHOTSPOT 100,16,4,1,H,X,Y ;REM MARKEER POSITIE BALK
270a BALK(A,B,C,16,4,H) ;REM PLAATS BALK
280
$V=Waarde : 00;V?9=C/10+48;V?10=C%10+48 ;REM VUL WAARDE IN
290 DLGLABEL $V,32,2,11 ;REM PLAATS TEKST
300 DLGEND
310
320 XIF Q=100 THEN ;REM OP BALK GEDRUKT??
330 CASE Y OF
340 <0> IF C>A;C=C-1 ;REM PLAATS WAS PIJL HOOG
350 <H-1> IF C<B;C=C+1 ;REM PLAATS WAS PIJL NEER
360 CEND
370 ELSE
380
390 IF Q=100;GOTO a ;REM INDIEN OK DAN STOP
400 CLS;END
Meervoudige selectie in listbox:
|
In het eerste voorbeeld programmeren in AW heb ik laten zien
hoe het DLGLISTBOX commando werkt. De beperking van dit commando is
echter dat je maar 1 keus kunt maken uit de lijst, terwijl het wel
eens voor kan komen dat er meerdere selecties nodig zijn uit een
lijst. |
Truc:
De truc die hier
toegepast is, is door weer gebruik te maken van de AW karakters maar
nu specifiek de codes 05 (radiobutton vol) en 06 (radiobutton leeg).
Aan elke keuze die in de listbox-array geplaatst wordt, wordt ASCII
code 06 toegevoegd. Wanneer de listbox aangeroepen wordt zal men dus
een lijst zien waar voor elke keuze een leeg rondje staat. Wanneer
men nu een keus maakt uit de lijst moet aan de hand van de gemaakte
keuze de positie van de 05/06 code berekent worden om van een code 06
een code 05, of van een code 05 een code 06 te maken. Dit kan met een
bewerking, namelijk een XOR met 3.
05=0000.1001 | | 06=0000.1010 | |
03=0000.0011 | | 03=0000.0011 | |
------------ | XOR | ------------ | XOR |
06=0000.1010 | | 05=0000.1001 | |
Wanneer de listbox nu
weer aangeroepen wordt zal het rondje voor de laatst gemaakte keuze
vol of leeg zijn. Om een bewerking uit te voeren met de gemaakte
keuzes, moet je met een stapgrootte door de listbox-array heenstappen
en kijken of voor een keuze de code 05 staat.
Programma: In een programma ziet het er als volgt uit:
10 PROGRAM MEERKEUZE
20
30 DIM K120,V64
40 *LOAD AWFONT 7000
50 M=10 ;REM AANTAL IN LIJST
60
70 $V=.Keuze00;V?6=6 ;REM STRING MET RONDJE
80 F.I=0 TO 9 ;REM CODE 6=LEEG RONDJE
90 V?6=I/10+48
100 V?7+I%10+48
110 $(K+I*9+12)=$V ;REM ZET STRING IN ARRAY
120 N.
130
140 CLEAR4;DLGCLS;DLGPOINTER 0 ;REM SCHOON SCHERM
150 DLGBASE#7000
160aDLGCREATE
A,Meerkeuze Demo,104,63,19,17 REM PLAATS LEEG VENSTER
170 DLGLISTBOX 100,K,1,3,8,10,M,0 ;REM PLAATS LIJST
180 DLGPUSHBUTTON 110,Check,32,11,7 ;REM PLAATS DRUKKNOP
190 DLGEND
200
210 CASE A OF
220 <100> ?(K+K?11*9+12)=?(K+K?11*9+12):3 ;REM IN LIJST GEDRUKT
230 <110> T=0 ;REM OP DRUKKNOP GEDRUKT
240 F.I=0 TO M-1
250 IF ?(K+I*9+12)=5;T=T+1 ;REM TEL SELECTIE
260 N.
270 $V=Aantal = 00
280 V?7=T/10+48 ;REM VUL AANTAL IN
290 V?8=T%10+48
300 DLGLABEL $V,32,1,14 ;REM PLAATS TEKST
310 PAUSE 100 ;REM EFFE WACHTEN
320 CEND
330
340 IF A<>0;G.a ;REM INDIEN OK DAN STOP
350 END
Voortgangsbalk:
|
Om in een bepaald proces aan te geven hoe ver het proces al
uitgevoerd is, kan men gebruik maken van een voortgangsbalk.
Bijvoorbeeld bij het formatteren van een diskette wil men graag zien
hoe ver het proces gevorderd is. |
Truc:
In AW is zoiets ook
mogelijk. Als eerste moet je een string definiëren waar net
zoveel spaties instaan als de lengte van de balk moet zijn. Deze
string moet dmv het DLGLABEL commando in style geïnverteerd en
grijs op het scherm geprint worden. Afhankelijk van de voortgang
wordt nu op dezelfde positie een geinverteerde spatie geprint
waardoor de zwarte balk steeds langer wordt.
Programma: Onderstaand programma laat zien hoe dit in zijn werk gaat.
10 PROGRAM VOORTGANGSBALK
20
30 DIM V64
40 *LO.AWFONT 7000
50 $V= ;REM BALK = 20 SPATIES
60
70 CLEAR4;DLGCLS;DLGPOINTER 0 ;REM SCHOON SCHERM
80 DLGBASE #7000
90 DLGCREATE A,Voortgangsbalk Demo,40,4,8,24,7;REM LEEG VENSTER
100 DLGFRAME ,0,2,4,(LEN V),1 ;REM KADER OM BALK
110a DLGLABEL $V,24,2,4 ;REM PLAATS BALK
120 F.I=0 TO LEN V-1
130 DLGLABEL ,8,(I+2),4 ;REM PLAATS ZWARTE BALK
140 PAUSE 30 ;REM EFFE WACHTEN
150 N.
160
160 PAUSE 100 ;REM BALK COMPLEET
170 G.a ;REM OPNIEUW
Bewegende iconen:
| Om een programma er aantrekkelijker uit te laten zien kun je
gebruik maken van bewegende iconen. |
Truc:
De truc die hier
toegepast wordt is het snel plaatsen van verschillende iconen op
dezelfde positie. Je moet dus een aantal iconen ontwerpen waarbij in
elk volgende icoon een verschuiving of verandering moet staan.
Wanneer deze dan een voor een op dezelfde positie op het scherm
geplaatst worden, lijkt het net of het icoon beweegt.
Programma:
Onderstaand programma
laat dit zien voor de iconen 0 t/m 5. Je moet dus wel zelf deze
iconen ontwerpen en opslaan.
10 PROGRAM BEWEGENDE ICONEN
20
30 *LO.AWFONT 7000
40
50 CLEAR4;DLGCLS;DLGPOINTER 0 ;REM SCHOON SCHERM
60 DLGBASE #7000
70 DLGCREATE A,Iconen Demo,40,6,8,22,8 ;REM LEEG VENSTER
80 DLGLABEL Bewegende Iconen,22,5,4 ;REM PLAATS STRING
90 DLGFRAME ,0,2,4,2,2 ;REM PLAATS KADER
100 S=0 ;REM TELLER OP 0
110 DO
120 DLGICON 0,S,,16,2,4 ;REM PLAATS ICOON
130 S=S+1;IF S=6;S=0 ;REM TEST OP LAATSTE
140 PAUSE 10 ;REM EVEN WACHTEN
150 U.0
Tot zo ver weer een verhaal over programmeren in Atomic Windows.
De volgende keer weer meer. Groeten, Kees van Oss
|