LOCATE: Difference between revisions
Jump to navigation
Jump to search
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
No edit summary |
No edit summary |
||
(7 intermediate revisions by the same user not shown) | |||
Line 6: | Line 6: | ||
{{ | {{PageParameters}} | ||
* optional text {{Parameter|row%}} [[INTEGER]] values are from 1 to 25, 43 or 50 in [[SCREEN]] 0 and 25 in most other legacy graphic screen modes, except screens 11 and 12 which can have 30 or 60 rows. | * optional text {{Parameter|row%}} [[INTEGER]] values are from 1 to 25, 43 or 50 in [[SCREEN]] 0 and 25 in most other legacy graphic screen modes, except screens 11 and 12 which can have 30 or 60 rows. | ||
* optional {{Parameter|column%}} [[INTEGER]] values are from 1 to 40 or 80 in [[SCREEN]] 0 and 80 in all other legacy screen modes. | * optional {{Parameter|column%}} [[INTEGER]] values are from 1 to 40 or 80 in [[SCREEN]] 0 and 80 in all other legacy screen modes. | ||
Line 17: | Line 17: | ||
* In [[_NEWIMAGE]] graphic screen the number of text ''rows'' are calculated as [[_HEIGHT]] \ 16 except when a [[_FONT]] is used. Use [[_FONTHEIGHT]] to calculate font rows. | * In [[_NEWIMAGE]] graphic screen the number of text ''rows'' are calculated as [[_HEIGHT]] \ 16 except when a [[_FONT]] is used. Use [[_FONTHEIGHT]] to calculate font rows. | ||
* [[_NEWIMAGE]] graphic screen text ''columns'' are calculated as [[_WIDTH (function)|_WIDTH]] \ 8 except when a [[_FONT]] is used. Use [[_PRINTWIDTH]] to measure a line of font text. | * [[_NEWIMAGE]] graphic screen text ''columns'' are calculated as [[_WIDTH (function)|_WIDTH]] \ 8 except when a [[_FONT]] is used. Use [[_PRINTWIDTH]] to measure a line of font text. | ||
** Additionally, when a variable width [[_FONT]] is active, then the ''columns'' are not counted as char positions anymore but as pixel positions instead. | |||
* The text ''row'' position is not required if the [[PRINT]] is going to be on the next row. The [[comma]] and a ''column'' value are required to set the column. | * The text ''row'' position is not required if the [[PRINT]] is going to be on the next row. The [[comma]] and a ''column'' value are required to set the column. | ||
* If only the ''row'' parameter is given, then the column position remains the same. '''Neither ''row'' or ''column'' parameter can be 0.''' | * If only the ''row'' parameter is given, then the column position remains the same. '''Neither ''row'' or ''column'' parameter can be 0.''' | ||
Line 22: | Line 23: | ||
* If the {{Parameter|cursorStart%}} line is given, the {{Parameter|cursorStop%}} line must also be given. A wider range between them produces a taller cursor. | * If the {{Parameter|cursorStart%}} line is given, the {{Parameter|cursorStop%}} line must also be given. A wider range between them produces a taller cursor. | ||
* If you use LOCATE beyond the current number of rows in text mode, QB64 will try to adapt the screen instead of tossing an error. | * If you use LOCATE beyond the current number of rows in text mode, QB64 will try to adapt the screen instead of tossing an error. | ||
* When writing to the console, only the ''row'' and ''column'' arguments are used, all others are ignored. Furthermore, on non-Windows systems LOCATE statements that do not give both a ''row'' and ''column'' will be ignored entirely. | |||
Line 27: | Line 29: | ||
''Example:'' Moving the cursor around (now you can finally create a Commodore 64 emulator!). '''Default SCREEN 0 only:''' | ''Example:'' Moving the cursor around (now you can finally create a Commodore 64 emulator!). '''Default SCREEN 0 only:''' | ||
{{CodeStart}} | {{CodeStart}} | ||
crx = 10 | crx = {{Text|10|#F580B1}} | ||
cry = 10 | cry = {{Text|10|#F580B1}} | ||
DO | {{Cl|DO}} | ||
{{Cl|LOCATE}} cry, crx, {{Text|1|#F580B1}}, {{Text|0|#F580B1}}, {{Text|8|#F580B1}} | |||
a$ = {{Cl|INKEY$}} | |||
{{Cl|SELECT CASE}} a$ | |||
{{Cl|CASE}} {{Cl|CHR$}}({{Text|0|#F580B1}}) + {{Text|<nowiki>"H"</nowiki>|#FFB100}}: {{Cl|IF}} cry > {{Text|1|#F580B1}} {{Cl|THEN}} cry = cry - {{Text|1|#F580B1}} {{Text|<nowiki>'up</nowiki>|#919191}} | |||
{{Cl|CASE}} {{Cl|CHR$}}({{Text|0|#F580B1}}) + {{Text|<nowiki>"P"</nowiki>|#FFB100}}: {{Cl|IF}} cry < {{Text|25|#F580B1}} {{Cl|THEN}} cry = cry + {{Text|1|#F580B1}} {{Text|<nowiki>'down</nowiki>|#919191}} | |||
{{Cl|CASE}} {{Cl|CHR$}}({{Text|0|#F580B1}}) + {{Text|<nowiki>"K"</nowiki>|#FFB100}}: {{Cl|IF}} crx > {{Text|1|#F580B1}} {{Cl|THEN}} crx = crx - {{Text|1|#F580B1}} {{Text|<nowiki>'left</nowiki>|#919191}} | |||
{{Cl|CASE}} {{Cl|CHR$}}({{Text|0|#F580B1}}) + {{Text|<nowiki>"M"</nowiki>|#FFB100}}: {{Cl|IF}} crx < {{Text|80|#F580B1}} {{Cl|THEN}} crx = crx + {{Text|1|#F580B1}} {{Text|<nowiki>'right</nowiki>|#919191}} | |||
{{Cl|CASE}} {{Cl|CHR$}}({{Text|27|#F580B1}}): {{Cl|END}} | |||
{{Cl|END SELECT}} | |||
LOOP | {{Cl|LOOP}} | ||
{{CodeEnd}} | {{CodeEnd}} | ||
: Explanation: The CHR$(0) + "H", "P", "K", "M" represents the cursor arrow keys. start = 0, stop = 8 is the tallest cursor, experiment with the start and stop values for different effects (start = 8, stop = 8 is the default producing a _ cursor). | : Explanation: The CHR$(0) + "H", "P", "K", "M" represents the cursor arrow keys. start = 0, stop = 8 is the tallest cursor, experiment with the start and stop values for different effects (start = 8, stop = 8 is the default producing a _ cursor). | ||
{{PageSeeAlso}} | {{PageSeeAlso}} | ||
* [[CSRLIN]], [[POS]] {{ | * [https://qb64phoenix.com/forum/showthread.php?tid=1218 Featured in our "Keyword of the Day" series] | ||
* [[CSRLIN]], [[POS]] {{Text|(cursor position)}} | |||
* [[SCREEN]], [[PRINT]], [[COLOR]] | * [[SCREEN]], [[PRINT]], [[COLOR]] | ||
* [[INPUT]], [[LINE INPUT]], [[INPUT$]] {{ | * [[INPUT]], [[LINE INPUT]], [[INPUT$]] {{Text|(keyboard input)}} | ||
* [[WIDTH]], [[INPUT$]], [[INKEY$]] | * [[WIDTH]], [[INPUT$]], [[INKEY$]] | ||
{{PageNavigation}} | {{PageNavigation}} |
Latest revision as of 17:29, 25 May 2024
The LOCATE statement locates the screen text row and column positions for a PRINT or INPUT procedure.
Syntax
- LOCATE [row%][, column%] [, cursor%][, cursorStart%, cursorStop%]
Parameters
- optional text row% INTEGER values are from 1 to 25, 43 or 50 in SCREEN 0 and 25 in most other legacy graphic screen modes, except screens 11 and 12 which can have 30 or 60 rows.
- optional column% INTEGER values are from 1 to 40 or 80 in SCREEN 0 and 80 in all other legacy screen modes.
- optional cursor% value can be 0 to turn displaying the cursor off or 1 to turn it on.
- optional cursorStart% and cursorStop% values define the shape of the cursor by setting the start and stop scanline (values range from 0 to 31) for the cursor character.
Description
- WIDTH statement can be used to determine the text width and height in SCREEN 0 and height of 30 or 60 in SCREEN 11 or 12.
- In _NEWIMAGE graphic screen the number of text rows are calculated as _HEIGHT \ 16 except when a _FONT is used. Use _FONTHEIGHT to calculate font rows.
- _NEWIMAGE graphic screen text columns are calculated as _WIDTH \ 8 except when a _FONT is used. Use _PRINTWIDTH to measure a line of font text.
- Additionally, when a variable width _FONT is active, then the columns are not counted as char positions anymore but as pixel positions instead.
- The text row position is not required if the PRINT is going to be on the next row. The comma and a column value are required to set the column.
- If only the row parameter is given, then the column position remains the same. Neither row or column parameter can be 0.
- When PRINTing on the bottom 2 rows, use a semicolon after the PRINT expression to avoid a screen roll.
- If the cursorStart% line is given, the cursorStop% line must also be given. A wider range between them produces a taller cursor.
- If you use LOCATE beyond the current number of rows in text mode, QB64 will try to adapt the screen instead of tossing an error.
- When writing to the console, only the row and column arguments are used, all others are ignored. Furthermore, on non-Windows systems LOCATE statements that do not give both a row and column will be ignored entirely.
Examples
Example: Moving the cursor around (now you can finally create a Commodore 64 emulator!). Default SCREEN 0 only:
crx = 10 cry = 10 DO LOCATE cry, crx, 1, 0, 8 a$ = INKEY$ SELECT CASE a$ CASE CHR$(0) + "H": IF cry > 1 THEN cry = cry - 1 'up CASE CHR$(0) + "P": IF cry < 25 THEN cry = cry + 1 'down CASE CHR$(0) + "K": IF crx > 1 THEN crx = crx - 1 'left CASE CHR$(0) + "M": IF crx < 80 THEN crx = crx + 1 'right CASE CHR$(27): END END SELECT LOOP |
- Explanation: The CHR$(0) + "H", "P", "K", "M" represents the cursor arrow keys. start = 0, stop = 8 is the tallest cursor, experiment with the start and stop values for different effects (start = 8, stop = 8 is the default producing a _ cursor).
See also
- Featured in our "Keyword of the Day" series
- CSRLIN, POS (cursor position)
- SCREEN, PRINT, COLOR
- INPUT, LINE INPUT, INPUT$ (keyboard input)
- WIDTH, INPUT$, INKEY$