Atomic Windows
Voorbeeld programmeren in AW: Gevoelig plekje
Inleiding:
In de reeks ‘Voorbeeld programmeren in AW’ wordt iedere keer een ander
AW-commando besproken en toegelicht met een voorbeeld programma. Het is
nu de beurt aan een commando wat een gevoelige plekje van Atomic Windows
is, nl. het DLGHOTSPOT commando. Dit commando is bedoeld om met de muis
binnen een bepaald vlak een positie aan te klikken waarvan de coordinaten
teruggegeven worden. Deze coordinaten zijn altijd vanaf de linkerbovenhoek
van het hotspot-vlak gezien, onafhankelijk van waar het hotspot-vlak geplaatst
is in het window.
Voorbeelden van dit commando zijn te vinden in het icoon ontwerp- en
het font ontwerp programma welke op de AW-Utils schijf staan.
Doel:
Door middel van dit voorbeeld wil ik demonstreren hoe eenvoudig het
is om met Atomic Windows een programma te maken waarmee bijvoorbeeld tekeningen
of delen van tekeningen op pixelnivo bewerkt kunnen worden.
Principe:
Het programma werkt als volgt:
Als eerste worden er 16 strings van 16 karakters gedefinieerd. De gebruikte
karakters zijn speciale Atomic Windows karakters (ASCII-code 0 t/m 31).
In dit voorbeeld zijn ASCII-code 9 (een leeg vierkant) en ASCII-code 10
(een gevuld vierkant) gebruikt.
Vervolgens worden deze 16 strings onder elkaar op het scherm geplaatst.
Op het scherm wordt dmv het DLGHOTSPOT commando een vlak gedefinieerd,
gelijk aan de posities van de strings, van 16 x 16 karakters. Wanneer men
in een DLGHOTSPOT-vlak een positie aanklikt, dan worden de X- en Y-coordinaat
van die positie opgeslagen in 2 variabelen welke in het commando gedefinieerd
zijn. De linkerbovenhoek is X=0 en Y=0. De Y-coordinaat geeft dus het stringnummer
aan en de X-coordinaat de positie binnen deze string.
Voorbeeld: ik klik in het DLGHOTSPOT-vlak positie 3,4 aan. Dit betekent
dat het 4e karakter in string 5 aangewezen wordt en in dit voorbeeld van
ASCII-code 9 een ASCII-code 10 of andersom gemaakt wordt. (LET OP, men
begint te tellen vanaf positie 0!!).
PROC INIT:
In array S worden 16 strings van 16 karakters gedefinieerd waarin elk
karakter een leeg vakje met kaderlijn is. Wanneer deze strings onder elkaar
op het scherm geplaatst worden, ontstaat er een kader met stippellijnenen.
PROC SCHERM:
Deze procedure bouwt een scherm op met een kader waarin de 16 strings
onder elkaar geplaatst worden. Dit vak wordt dmv het DLGHOTSPOT tot een
gevoelig plekje gebombardeerd.
Hieronder staat een afdruk van het scherm:
HOOFDPROGRAMMA:
Als eerste wordt alles geinitieerd en het scherm opgebouwd.
Daarna begint de loop waarin men blijft totdat er op de Ok-knop gedrukt
wordt.
Wanneer er met de muis op een vakje in het hotspot-vlak gedrukt wordt,
dan wordt dit vakje verkleurd. Dwz als het wit is wordt het zwart of andersom.
Hierbij is een truukje gebruikt om van ASCII-code 9, ASCII-code 10
te maken of andersom. Decimaal 9 is binair 1001 en decimaal 10 is binair
1010. Binair 1001 (9) exclusief-OR 3 is binair 1010. Binair 1010 (10) exclusief-or
3 is binair 1001 (9). We kunnen dus het karakter in de string exclusief-OR-en
met 3 om een wit vakje zwart, of een zwart vakje wit te maken.
De listing van het programma staat hieronder:
10 PROGRAM HOTSPOT
20
30 DIM S(300) ; Init string ruimte
40
50 PROC INIT
60 CLEAR4
70 DLGCLS
80 DLGPO.0 ; Muispointer aan
90 DLGBA.#7000
100 F.I=0TO15 ; Defineer 16 strings
110 F.J=0TO15S.4 ; Elke string 16 x ASCII-code
9
120 !(S+I*17+J)=#09090909
130 N.
140 ?(S+I*17+J)=13
150 N.
160 PEND
170
180 PROC SCHERM
190 DLGCRE.A,"Hotspot",104,7,1,18,22; Plaats window
200 DLGFR."",0,1,3,16,16 ; Plaats frame
om vak
210 DLGHOT.100,1,3,16,16,X,Y ; Defineer
hotspot-vak
220 F.I=0 TO 15 ; Plaats 16 strings
230 DLGLA.(S+I*17),0,1,(I+3)
240 N.
250 PEND
260
270 REM HOOFDPROGRAMMA
280 INIT
290 SCHERM
300
310 DLGEND
320
330 XIF A=100 THEN ; Binnen hotspot gedrukt?
340 ?(S+Y*17+X)=?(S+Y*17+X):3 ; Verkleur vakje
350 DLGLA.(S+Y*17),0,1,(Y+3) ; Plaats nieuwe
string
360 ELSE
370
380 IF A<>0;G.310 ; Ok-knop gedrukt?
390
400 END
Zo, weer een artikel in de reeks 'Voorbeeld programmeren in AW'. De
volgende keer weer meer. Tot schrijvens!!!
Kees van Oss
|