level 8
这个贴不定期搬运有关QB64的中文资料集,帮助需要的人
2021年02月26日 09点02分
1
level 8
QB64介绍:
QB64是现代的BASIC + OpenGL语言,是与BASIC兼容的编辑器和C ++编译器,可从QBasic BAS文件创建可运行的可执行文件,这些文件可在使用Windows(XP至10),Linux或macOS的32位或64位PC上运行。我们的目标是与QuickBASIC 4.5 100%兼容,并添加数百种新功能,例如程序图标和自定义大小的窗口以及具有内置帮助的出色的Retro Editor。
在新的关键字添加一些新的功能,比如播放音乐或声音文件,并即时访问32位图形文件的图像。此外TCP / IP网络通信可用来下载文件,电子邮件在网上或播放信息网络游戏。DLL库可以添加更多的编程选项,而QB64可以访问所有新的USB游戏控制器和打印机。
QB是QBasic或QuickBASIC的缩写,它是一种易于学习的语言,在90年代非常流行。它使用简单的语法,但由于存在实现几乎所有目标的方法,因此具有很大的潜力。使用QB64,QBasic比以往更活跃!
QB64具有许多现代功能:
1)完整的图形功能,用于高达32位彩色的图像。支持Alpha透明度。
2)即时加载图像文件,包括BMP,PNG,JPEG,GIF等...
3)支持立体声声音文件,例如WAV,OGG,MP3,扬声器和音量控制等等。
4)使用_DISPLAY而不是页面翻转很容易制作动画,以实现无闪烁的图形。
5)剪贴板读写支持。
6)通过TCP / IP和电子邮件联网。
7)多种语言的True Type字体和Unicode支持。
8)集成的鼠标和游戏控制器输入,包括滚轮支持。
9)支持C ++,OpenGL,Windows API和其他自定义动态链接库。
2021年02月26日 10点02分
3
level 8
【QB64当前不支持的关键字:】
ALIAS (仅在DECLARE LIBRARY中受支持)
ANY
BYVAL (仅在DECLARE LIBRARY中受支持)
CALLS
CDECL
DATE$ (声明)(支持读取当前的DATE $)
DECLARE (非BASIC语句)
DEF FN, EXIT DEF, END DEF
ERDEV, ERDEV$
FILEATTR
FRE
IOCTL, IOCTL$
OPEN用类似的设备LPT,CON,KBRD不被支持,和其他设备。支持LPRINT和OPEN COM。
ON PEN, PEN(声明),PEN(功能)
ON PLAY(n), PLAY(n) ON/OFF/STOP. (支持PLAY音乐。)
ON UEVENT
SETMEM
SIGNAL
TIME$ (语句)(支持读取当前的TIME $)
TRON, TROFF
不支持WIDTH LPRINT组合语句。
【Linux或macOS版本不支持的关键字:】
此处列出的命令包含特定于平台的调用,将来可能会在Linux和macOS中实现。这些命令当前导致存根调用,该存根调用什么也不做。
注意:IDE不支持一次打开或检索多个程序,但是可以同时使用IDE的多个实例。
一些特定于OS的窗口/桌面调用:
_ACCEPTFILEDROP,_TOTALDROPPEDFILES,_DROPPEDFILE,_FINISHDROP
_SCREENPRINT
_SCREENCLICK
_SCREENMOVE(在macOS中可用,在Linux中不可用)
_CLIPBOARDIMAGE,_CLIPBOARDIMAGE(函数)
_WINDOWHASFOCUS(在Linux中可用,在macOS中不可用)
_WINDOWHANDLE
_CAPSLOCK,_NUMLOCK,_SCROLLLOCK(语句和函数)
模块化:QB64对文件大小没有限制,因此可以组合BAS文件模块。
CHAIN
RUN
鼠标相关:
_MOUSEWHEEL(在Linux中可用,在macOS中不可用)
印刷:
LPRINT
_PRINTIMAGE
端口访问:
OPEN COM
文件锁定:
LOCK
UNLOCK
2021年02月26日 10点02分
4
level 8
内容:
1个阵列和数据存储
2个颜色和透明度
3控制台窗口
4条件运算
5定义和变量类型
6外部磁盘和API调用
7错误代码
8错误陷阱
9事件诱捕
10文件输入和输出
11字型
12游戏控制器输入(游戏杆)
13图形命令
14图形和成像:
15键盘输入
16图书馆
17逻辑按位运算
18岁数学函数与运算
19内存处理和剪贴板
20元命令
21岁鼠标输入
22数值运算和转换
23端口输入和输出(COM和LPT)
24打印格式
25打印机输出(LPT和USB)
26程序流程和循环
27声音和音乐
28岁字符串文本操作和转换
29子程序和功能
30TCP / IP网络和电子邮件
31屏幕上的文字
32时间,日期和时间
33视窗和桌面
34QB64编程符号
2021年02月26日 10点02分
5
level 8
1阵列和数据存储:
_DEFINE(语句) 根据它们的第一个字符将其定义为数据类型,该范围定义了一系列无类型的变量名。
句法:
_DEFINE 字母[ -range,...] AS [ _UNSIGNED ]数据类型
_PRESERVE(REDIM选项)在调整数组大小时保留现有元素值。
句法:
REDIM _PRESERVE数组(newLowerIndex& [TO newUpperIndex& ])[AS变量类型]
CLEAR(语句)将所有变量值和数组元素值重置为0或空字符串,并关闭所有打开的文件。
句法:
CLEAR [,忽略1&,忽略2& ]
DIM(语句)标注(调整大小)一个静态数组并定义类型。
句法:
声明变量:
DIM [ SHARED ]变量[{suffix | AS [ _UNSIGNED ]类型}] [,变量2 ...]
声明数组:
DIM [ SHARED ]数组([[lowest%TO ] high %%]) [{后缀| AS [ _UNSIGNED ]类型}] [,变量2 ...]
QB64替代语法:
DIM [ SHARED ] AS [ _UNSIGNED ]类型 变量 [,variable2 ...]
DIM [ SHARED ] AS [ _UNSIGNED ]类型 array([lowest%TO ] maximum%]) [,array2(elements) ...]
$ DYNAMIC(元命令)定义所有数组的大小均为动态或可变。
句法:
{REM | ' } $DYNAMIC
●QBasic的元命令需要REM或撇号之前('),并且通常放置在主模块的开始。
●可以使用REDIM调整动态数组的大小。数组的类型不能更改。
●当阵列中的所有数据都将丢失REDIMensioned时除外_PRESERVE被使用。
●当阵列边界改变时,REDIM _PRESERVE可以保留并可以移动先前的阵列数据。
●_PRESERVE允许上部和下部的阵列的边界被改变。尺寸数不能更改。
●$动态阵列必须REDIMensioned如果ERASE或CLEAR用作阵列被完全去除。
ERASE(数组语句)清除所有值的静态数组,并完全删除动态数组。
句法:
ERASE arrayName [,arrayName2 ...]
●所有字符串数组元素均变为空字符串(“”),所有数字数组元素均变为0。
●可以使用阵列名称之间的逗号来擦除多个阵列。
●如果动态数组在擦除后被引用,则必须重新分配动态数组。
●将子过程数组标注为STATIC即可使用ERASE,而不必进行REDIM。
●您不必在ERASE调用中包含数组括号。
LBOUND(数组函数)返回的最低有效指数(下边界)阵列。
句法:
result% = LBOUND(arrayName[, dimension%])
●arrayName指定数组的名称。
●Dimension%指定尺寸编号,从1第一个尺寸开始。
●如果省略,则将Dimension%假定为1。
●如果Dimension%小于1或大于维度数,则会出现下标超出范围错误。
OPTION BASE(precompiler语句)将数组的默认起始索引设置为0或1。
句法:
OPTION BASE {0|1}
●该语句会影响未指定维度下限的数组声明。
●使用OPTION BASE之前,必须先影响所有数组声明(DIM)。
●默认情况下,数组的下限为零,并且可以使用以下语句将其更改为一。
●否则,如果仅将DIM作为上限,则数组将从元素0开始缩放。
●您还可以通过在DIM声明中使用TO来设置其他数组边界,例如DIM array(5 TO 10)
选项_EXPLICIT(precompiler指令)指示编译器要求使用DIM或等效语句声明变量。
句法:
OPTION _EXPLICIT
●使用OPTION _EXPLICIT,可以通过使QB64在没有事先声明的情况下立即在使用的新变量的状态区域中警告QB64来避免输入错误。
●通过命令行(qb64 -c file.bas -e)进行编译时,即使程序源文件不包含指令,也可以通过指定-e开关来暂时启用OPTION _EXPLICIT。
●如果使用,则OPTION _EXPLICIT必须是程序中的第一条语句。除$ NOPREFIX或以单引号或REM开头的注释行外,没有其他语句可以在它之前。
●不要在$ INCLUDEd模块中使用OPTION _EXPLICIT。
选项_EXPLICITARRAY(precompiler指令)指示编译器要求使用DIM或等效语句声明数组。
句法:
OPTION _EXPLICITARRAY
●通常,类似x(2)= 3的语句将隐式创建一个数组x()。选项_EXPLICITARRAY需要在数组前面声明,以帮助捕获错误键入的数组和函数名称。
●与OPTION _EXPLICIT不同,简单变量无需声明即可使用。示例:i = 1
●如果使用,则OPTION _EXPLICITARRAY必须是程序中的第一条语句。除$NOPREFIX或以单引号或REM开头的注释行外,没有其他语句可以在它之前。
●不要在$ INCLUDEd模块中使用OPTION _EXPLICITARRAY。
REDIM(语句)重新定义动态(可调整大小)数组中元素的数量,并定义类型。
句法:
REDIM [_PRESERVE] [SHARED] ArrayName[typesuffix] ({max_element|low_element[TO upper_element, ...]}) [AS Type]
REDIM [_PRESERVE] [SHARED] [AS Type] ArrayName({max_element|low_element[TO upper_element, ...]})
●可以更改数组中元素的数量(除非使用_PRESERVE,否则当前数组数据将丢失)。
●动态数组元素还可以通过程序用户的输入来调整大小或调整大小。
●所述_PRESERVE选项还允许所述元件范围内的值被向上或向下移动。
●数组是要调整尺寸或重新定义尺寸的数组的名称。
●elements是数组应包含的元素数。使用可选的TO 元素2设置范围。
●始终使用相同的数组TYPE后缀(AS类型),否则可能会创建一个具有相同名称的新数组类型。
●REDIM不能改变$ STATIC与创建数组DIM,除非声明$动态 元命令使用。
●要创建动态数组,请在第一次创建数组时使用$ DYNAMIC元命令或使用REDIM而不是DIM。
●使用REDIM _PRESERVE可以更改数组元素的范围或数量,而不会丢失其余元素。数据可以上下移动以适应这些边界变化。
●REDIM _PRESERVE无法更改数组维数或类型的数量。
●动态数组必须REDIMensioned如果ERASE或CLEAR用于清除数组,因为它们不再存在。
●使用AS声明类型时,请使用AS保留该类型,否则它将更改为SINGLE!
●警告!请勿将负数组上限索引值用作OS访问权限,否则将发生“内存不足”错误。
●使用AS类型变量列表语法时,不能使用类型符号。
SHARED(语句)指定可在不使用参数的情况下与子过程共享的变量值。
句法:
DIM SHARED Qt AS STRING * 1
DIM SHARED AS STRING * 1 Qt
●DIMensioned变量与程序模块中的所有过程共享。
●与主模块中的DIM一起使用时,无需将参数变量传递给SUB或FUNCTION。
●使用COMMON SHARED与子过程或其他模块共享变量值列表。另请参阅:常见
●SHARED(不带DIM)只能与主模块共享SUB或FUNCTION过程中的变量列表。
●使用AS类型变量列表语法时,不能使用类型符号。
【注意】:子过程中的SHARED变量不会传递给其他子过程,而仅传递给主模块。
STATIC(语句)定义一个变量或变量列表,在退出子过程后将保留其值。
句法:
STATIC variableName[()] [AS dataType][, ...]
STATIC [AS dataType] variableName[()][, ...]
{SUB|FUNCTION} procedureName [(parameterList)] STATIC
●可以在SUB和FUNCTION过程中使用STATIC列表来指定一个或多个变量以保留其值。
●具有静态存储的变量和数组将在过程调用之间保留其值。这些值也可以递归使用。
●variableName可以包含类型后缀,也可以使用AS指定默认SINGLE类型以外的其他类型。
●通过在数组名称后指定空括号来声明具有静态存储空间的数组。查看数组
●可以在过程中的SUB或FUNCTION名称后面使用STATIC,以强制所有变量保留其值。
●可能需要将递归过程设为STATIC,以避免堆栈溢出错误。QB64程序可能刚刚关闭。
●$ STATIC定义的程序数组无法调整大小或使用_PRESERVE。
$ STATIC(元命令)定义所有数组都是静态的或大小不变。
句法:
{ REM | ' } $ STATIC
●QBasic元命令在其之前需要REM或撇号('),并且通常放置在主模块的开头。
●静态数组无法调整大小。如果使用变量来调整任何数组的大小,则它将变为$ DYNAMIC。
●一个REDIM语句不影响$ STATIC也许除了一个阵列重复定义错误在REDIM语句。
●一旦DIM和文字值设置了尺寸和元素大小,就无法更改数组的类型。
●$ STATIC定义的程序数组无法调整大小或使用_PRESERVE。
SWAP(语句)交换两个数字或字符串值或数组元素的值。
句法:
SWAP 变量1,变量2
●变量1和变量2是将交换其值的任何类型变量。
●如果变量1或变量2是数组,则必须指定数组中的元素。
●SWAP可以与字符串或数字变量值一起使用。两者必须为同一类型。
●SWAP通常用于将数组元素排序为或多或少的数字或累积ASCII STRING值。
●可以在页面翻转中使用SWAP在源页面和目标页面之间进行切换。
UBOUND(数组函数)返回一个的最高有效指数(上边界)阵列
句法:
result% = UBOUND(arrayName[, dimension%])
●arrayName指定数组的名称。
●Dimension%指定尺寸编号,从1第一个尺寸开始。
●如果省略,则将Dimension%假定为1。
●如果Dimension%小于1或大于维度数,则会出现下标超出范围错误。
●UBOUND和LBOUND一起用于确定数组的有效索引的范围。
2021年02月26日 11点02分
7
level 8
DATA(语句)创建一个由逗号分隔的内置程序数据值的字段。
句法:
DATA [值1,值2,...]
●在每个数据字段行的开头使用DATA,并用逗号分隔后面的值。
●值可以是任何文字 STRING或数字类型。不能使用变量。
●可以在具有或不具有RESTORE的行标签的主程序代码主体中连续放置和读取DATA字段。
●DATA最好放在主程序代码之后。
●QB64 DATA可以放在SUB或 FUNCTION过程中。
●如果未标记DATA或在RESTORE调用中未指定标签,则RESTORE仅读取第一个数据字段。
●使用多个DATA字段时,请用行标签标记每个数据字段,以便可以使RESTORE linelabel重置每个数据指针以进行多次读取。
●QBasic逗号分隔很灵活,可以在创建它们时进行列对齐。QB64消除逗号之间的间隔。
●带引号的带有字符串末尾的STRING DATA值,QBasic关键字和包含逗号的值必须用引号引起来。
●DATA字段只能由程序员创建,不能由用户更改或丢失。
●数据行后的注释在注释之前需要冒号。
●如果READ语句尝试读取最后一个数据值,则将发生“数据不足”错误。必要时使用数据结尾标记。
●可以在SUB或FUNCTION过程之后放置DATA字段,但不允许使用行标签。
READ(语句)从数据字段顺序读取DATA。
句法:
READ value1$[, value2!, value3%, ...]
●READ语句按一对一的顺序将变量分配给DATA语句值。
●一条READ语句可以访问一个或多个DATA值。它们以顺序集进行访问。
●多个READ语句可以在以下顺序位置访问同一DATA语句块。
●可以使用STRING或数字TYPE变量单独或在逗号分隔的列表中读取DATA:
●STRING READ变量可以读取带引号或不带引号的文本或数字DATA值!数值类型READ变量只能读取未加引号的数值DATA值!如果他们不同意,则在将字符串数据读取为数值时可能会导致“语法错误”!
●如果指定的变量数少于DATA语句中的元素数,则后续的READ语句将从下一个未读元素开始读取数据。如果没有后续的READ语句,则多余的数据将被忽略。
●如果变量读取超过DATA字段中的元素数,将发生“数据不足”错误!
●使用RESTORE语句从头开始重新读取DATA语句,根据需要使用或不使用行标签。
●可以在OPEN语句中使用ACCESS READ来将文件访问限制为只读,从而保留文件数据。
●警告!不要在SUB或FUNCTION过程之后放置DATA字段!QB64将无法正确编译!
●QBasic允许程序员在任何地方添加DATA字段,因为IDE将主代码与其他过程分开了。
RESTORE(语句)将数据指针设置为所有DATA或指定DATA字段的开始。
句法:
RESTORE [LINENUMBER | lineLabel]
●行标签或数字使已标记的数据字段可以根据需要多次读取。
●在代码主体中使用ONE或一系列数据字段时,不需要数据字段标签名称。
●标记多个数据字段以将其还原以在必要时再次使用它们。
●如果将RESTORE与未标记的数据字段一起使用,或者未指定任何数据字段,则将读取第一个数据字段。
●读取数据字段时,请使用RESTORE以避免“数据不足”错误!
●有关STRING数据值规范,请参见DATA语句。
●不要在SUB或FUNCTION过程之后放置DATA字段!QB64将无法RESTORE正确!
●QBasic允许程序员在任何地方添加DATA字段,因为IDE将主代码与其他过程分开了。
2021年02月26日 11点02分
8
level 2
DEF FN, EXIT DEF, END DEF不被支持的话,有类似功能的语句吗
2025年05月23日 00点05分
11
QB64 目前不支持的关键字 QB64 旨在与 QB 4.5 或更低版本兼容。不支持 PDS (7.1)。QB64 目前不支持下面列出的关键字。但是,使用这些关键字的旧代码不会生成错误,因为编译器会忽略这些错误。 ALIAS(仅在 DECLARE LIBRARY 中受支持) 任何 BYVAL(仅在 DECLARE LIBRARY 中受支持) 调用 CDECL 公司 DATE$ (语句) (支持读取当前 DATE$) DECLARE (非 BASIC 语句) DEF FN, EXIT DEF, END DEF (必须重新设计为实际的 FUNCTION) ERDEV, ERDEV$ FILEATTR FRE IOCTL、IOCTL$ 不支持对 LPT:、CON:、KBRD: 等设备和其他设备执行 OPEN。支持 LPRINT 和 OPEN COM。 ON PEN、PEN(语句)、PEN(函数) 在 PLAY(n) 上,PLAY(n) 开/关/停止。(支持 PLAY 音乐。 在 UEVENT 上,UEVENT (语句) 赛特姆 信号 TIME$ (语句) (支持读取当前 TIME$) TRON 特罗夫 不支持 WIDTH LPRINT 组合语句。
2025年06月09日 15点06分
QB64 目前不支持的关键字 QB64 旨在与 QB 4.5 或更低版本兼容。不支持 PDS (7.1)。QB64 目前不支持下面列出的关键字。但是,使用这些关键字的旧代码不会生成错误,因为编译器会忽略这些错误。 ALIAS(仅在 DECLARE LIBRARY 中受支持) 任何 BYVAL(仅在 DECLARE LIBRARY 中受支持) 调用 CDECL 公司 DATE$ (语句) (支持读取当前 DATE$) DECLARE (非 BASIC 语句) DEF FN, EXIT DEF, END DEF (必须重新设计为实际的 FUNCTION) ERDEV, ERDEV$ FILEATTR FRE IOCTL、IOCTL$ 不支持对 LPT:、CON:、KBRD: 等设备和其他设备执行 OPEN。支持 LPRINT 和 OPEN COM。 ON PEN、PEN(语句)、PEN(函数) 在 PLAY(n) 上,PLAY(n) 开/关/停止。(支持 PLAY 音乐。 在 UEVENT 上,UEVENT (语句) 赛特姆 信号 TIME$ (语句) (支持读取当前 TIME$) TRON 特罗夫 不支持 WIDTH LPRINT 组合语句。
2025年06月09日 15点06分