1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-16 20:05:14 +00:00
qb64/internal/help/_PRINTSTRING.md

124 lines
5 KiB
Markdown
Raw Normal View History

The [_PRINTSTRING](_PRINTSTRING) statement prints text [STRING](STRING) using graphic column and row coordinate positions.
## Syntax
> [_PRINTSTRING](_PRINTSTRING)(column, row), textExpression$[, imageHandle&]
## Parameter(s)
* column and row are [INTEGER](INTEGER) or [LONG](LONG) starting PIXEL (graphic) column and row coordinates to set text or custom fonts.
* textExpression$ is any literal or variable [STRING](STRING) value of text to be displayed.
* imageHandle& is the optional image or destination to use. Zero designates current [SCREEN (statement)](SCREEN-(statement)) page.
## Description
* The starting coordinate sets the top left corner of the text to be printed. Use [_FONTHEIGHT](_FONTHEIGHT) to calculate that text or [_FONT](_FONT) position
* The [_FONT](_FONT) size can affect the [SCREEN (statement)](SCREEN-(statement)) and row heights.
* Custom fonts are not required. [_PRINTSTRING](_PRINTSTRING) can print all [ASCII](ASCII) characters.
* [_PRINTWIDTH](_PRINTWIDTH) can be used to determine how wide a text print will be so that the screen width is not exceeded.
* If the imageHandle& is omitted, the current image, page or screen destination is used.
* Can use the current font alpha blending with a designated image background. See the [_RGBA](_RGBA) function example.
* Use the [_PRINTMODE](_PRINTMODE) statement before printing to set how the background is rendered.
* Use the [_PRINTMODE (function)](_PRINTMODE-(function)) to find the current _PRINTMODE setting.
* In SCREEN 0 (text only), [_PRINTSTRING](_PRINTSTRING) works as one-line replacement for **LOCATE x, y: PRINT text$**, without changing the current cursor position.
## Availability
* In versions of QB64 prior to 1.000 _PRINTSTRING can only be used in graphic, 256 color or 32 bit screen modes, not SCREEN 0.*
## Example(s)
Printing those unprintable [ASCII](ASCII) control characters is no longer a problem.
```vb
SCREEN _NEWIMAGE(800, 600, 256)
FOR code = 0 TO 31
chrstr$ = chrstr$ + CHR$(code) + SPACE$(1)
NEXT
_FONT _LOADFONT("C:\Windows\Fonts\Cour.ttf", 20, "MONOSPACE") 'select monospace font
_PRINTSTRING (0, 16), chrstr$
END
```
```text
☺ ☻ ♥ ♦ ♣ ♠ • ◘ ○ ◙ ♂ ♀ ♪ ♫ ☼ ► ◄ ↕ ‼ ¶ § ▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼
```
Making any **QB64 program window** larger using a SUB that easily converts PRINT to [_PRINTSTRING](_PRINTSTRING).
```vb
Scr13& = _NEWIMAGE(320, 200, 13) 'this is the old SCREEN 13 image page to set the image
Big13& = _NEWIMAGE(640, 480, 256) 'use 4 X 3 aspect ratio that QBasic used when full screen
SCREEN Big13&
_DEST Scr13&
image1& = _LOADIMAGE("Howie.BMP", 256)
image2& = _LOADIMAGE("Howie2.BMP", 256)
_PUTIMAGE (10, 20), image1&, Scr13&
_PUTIMAGE (160, 20), image2&, Scr13&
_COPYPALETTE image1&, Scr13&
COLOR 151: LOCATE 2, 4: PRINTS "Screen 13 Height Reduction to 83%"
LOCATE 22, 22: PRINTS CHR$(24) + " 4 X 3 Proportion" 'use concatenation
LOCATE 24, 21: PRINTS CHR$(27) + " Stretched at 100%" 'instead of a semicolon!
_COPYPALETTE Scr13&, Big13& 'required when imported image colors are used
_PUTIMAGE , Scr13&, Big13& 'stretches the screen to double the size
K$ = INPUT$(1)
END
SUB PRINTS (Text$)
row% = (CSRLIN - 1) * _FONTHEIGHT 'finds current screen page text or font row height
col% = (POS(0) - 1) * _PRINTWIDTH("W") 'finds current page text or font column width
_PRINTSTRING (col%, row%), Text$
END SUB
```
> *Explanation:* The procedure above creates a larger version of a SCREEN 13 window by stretching it with [_PUTIMAGE](_PUTIMAGE). It cannot stretch PRINTed text so [_PRINTSTRING](_PRINTSTRING) must be used instead. [LOCATE](LOCATE) sets the PRINT cursor position for [CSRLIN](CSRLIN) and [POS](POS)(0) to read. The SUB then converts the coordinates to graphical ones. Then **change** [PRINT](PRINT) to PRINTS using the IDE **Search Menu**.
[Download of Example 2 Bitmap images](https://www.dropbox.com/s/tcdik1ajegbeiz4/HOWIE.zip?dl=0)
Rotating a text string around a graphic object.
```vb
SCREEN 12
DIM row AS INTEGER, cnt AS INTEGER, cstart AS SINGLE, cend AS SINGLE
DIM xrot AS INTEGER, yrot AS INTEGER, scale AS INTEGER
' _FULLSCREEN 'full screen optional
cstart = 0: cend = 8 * ATN(1)
xrot = 6: yrot = 60: scale = 4
row = 1
CIRCLE (320, 240), 15, 9: PAINT STEP(0, 0), 9
DO
FOR i = cstart TO cend STEP .04
x = 300 + (scale * 40 - (row * xrot)) * COS(i)
y = 200 + (scale * 40 - (row * yrot)) * SIN(i)
cnt = cnt + 1
COLOR 7: _PRINTSTRING (x, y), "HELLO WORLD!", 0 'display
IF cnt = LEN(text$) * 8 THEN cnt = 0: EXIT DO
_DISPLAY
COLOR 0: _PRINTSTRING (x, y), "HELLO WORLD!", 0 'erase
_DELAY 0.02
NEXT
LOOP UNTIL INKEY$ = CHR$(27) 'escape key exit
COLOR 15
END
```
## See Also
* [_NEWIMAGE](_NEWIMAGE), [_PRINTWIDTH](_PRINTWIDTH), [_PRINTMODE](_PRINTMODE)
* [_CONTROLCHR](_CONTROLCHR) (turns [ASCII](ASCII) control characters OFF or ON)
* [_FONT](_FONT), [_LOADFONT](_LOADFONT), [_FONTHEIGHT](_FONTHEIGHT), [_FONTWIDTH](_FONTWIDTH)
* [_SCREENIMAGE](_SCREENIMAGE), [_SCREENPRINT](_SCREENPRINT)
* [Text Using Graphics](Text-Using-Graphics)