In this section:
Text arrays, %tx (Text Array), provide a convenient way to display a grid of characters with 'attributes' to achieve an effect analogous to that achieved under DOS by writing to the screen buffer. A text array can respond to keyboard and mouse input via its call-back function by using CLEARWIN_INFO@ (see below), updating the array as necessary. The text array format takes two character strings and two integer modifiers N, and M.
For example:
WINAPP
CHARACTER*800 text,attr
INTEGER k,winio@
text='Test colour'
CALL char_fill@(attr,char(0))
CALL char_fill@(attr(1:4),char(1))
CALL char_fill@(attr(6:11),char(2))
k=winio@('%60.8tx&',text,attr,80L,10L)
k=winio@('%tc[blue]%ty[red]%tc[yellow]%ty[green]')
END
In the above example, the text array text is displayed in the box as an 80 x 10 array of which initially only 60 x 8 is visible. The size of the control can be varied if it is preceded by a pivot (%pv (Pivot)) in a variable sized window. The attr array contains attribute numbers stored using CHAR(i) where 0 < i < 255. Zero is the default attribute (usually black on white), others are defined by subsequent %tc[fgcolour]%ty[bgcolour] format pairs. The first %tc%ty pair defines colour index 1and so on. fcolour is the foreground colour of the text, and bgcolour is the background. In the above example, the word 'Test' appears as blue on a red background whilst the word 'colour' appears as yellow on a green background. The colour can be specified as an RGB@ value in the argument list if the colour in brackets is omitted. Changes in font attributes (underlining, etc.) are not possible with %tx.
%tx may have a call-back functino that can use the following CLEARWIN_INFO@ strings:
TEXT_ARRAY_CHAR |
value of key pressed |
TEXT_ARRAY_DEPTH |
holds the new value on resizing |
TEXT_ARRAY_MOUSE_FLAGS |
mouse button press information |
TEXT_ARRAY_RESIZING |
text array window dimension change |
TEXT_ARRAY_WIDTH |
holds the new value on resizing |
TEXT_ARRAY_HEIGHT |
holds the new value on resizing |
TEXT_ARRAY_X |
location x when the mouse is pressed in %tx |
TEXT_ARRAY_Y |
location y when the mouse is pressed in %tx |
The TEXT_ARRAY_RESIZING parameter is set to one only in a call-back responding to a re-sizing event. The next two parameters in the table only have meaning in this context. They supply the new size of the control in average characters.
The TEXT_ARRAY_X and TEXT_ARRAY_Y parameters give the mouse position in characters from the top left corner, and are zero based. The mouse flags, that contain information about which mouse button (if any) is depressed, can be obtained by a call to GET_MOUSE_INFO@. The option FULL_MOUSE_INPUT is specified in order to force the call-back function to be called whenever the mouse moves over the control.
TEXT_ARRAY_MOUSE_FLAGS uses bitwise flags as follows:
MK_LBUTTON |
1 |
Left mouse button depressed |
MK_LBUTTON |
2 |
Right mouse button depressed |
MK_SHIFT |
4 |
Keyboard shift key depressed |
MK_CONTROL |
8 |
Keyboard control key depressed |
MK_MBUTTON |
16 |
Middle mouse button depressed |
By default, the call-back function is called when a keyboard character is received while the control has the focus. The character is placed in the parameter TEXT_ARRAY_CHAR. If the option FULL_CHAR_INPUT is specified, the call-back function receives each keystroke using the Microsoft VK_ parameters (defined in the file windows.ins). The call-back is invoked for each key press and each key release. In the latter case TEXT_ARRAY_CHAR parameter has the top bit set. The parameter TEXT_ARRAY_CHAR will be zero when not in use. To respond to ALT key combinations you should use the %ac (Accelerator Key) facility rather than tracking the ALT key with FULL_CHAR_INPUT. This is because messages associated with the release of the ALT key might be delayed until the next key is pressed. The option USE_TABS may be used to cause the tab key to be passed to the call-back rather than performing its normal Windows function of moving between controls.
The system font is used in a %tx control, unless %fn (Font) appears before %tx. If %fn is used then a mono-spaced font (such as Courrier New) should be selected because the text array must be aligned both vertically and horizontally.
Note that the text array is not re-dimensioned if the control is re-sized. Re-sizing simply changes the region that is visible.
The text array control ( %tx) is used extensively in the 32 and 64-bit debuggers SDBG and SDBG64.