论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
搜索
登录
搜索
勇芳
累计撰写
330
篇文章
累计收到
0
条评论
首页
栏目
论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
包含标签 【编程】 的文章
2026-1-21
VisualFreeBasic代码_内存
在编程过程中,需要经常和内存打交道,所有的变量,所有的操作,都在内存中进行。 当然我们也可以直接对内存管理。 使用动态内存 Deallocate 释放以前赋值的内存 Allocate 从空闲存储器赋值一块内存 CAllocate 从空闲存储器为一定数量的元素赋值内存,并清除内容 Reallocate 为现有的预留内存块重新赋值存储空间 操作例题: 申请 10个字节大小的内存 Dim p As any Ptr = CAllocate(10) 使用完成后,需要回收内存,不然会发生内存泄漏问题,软件会越占内存越多。 Deallocate p Allocate和CAllocate的区别 Allocate一个获取内存后,内存中原来有什么数据,就什么数据,你永远无法确定是什么内容,而CAllocate,获取内存后,多了一步清空数据操作。 其它内存操作 Clear 清除或初始化一些内存 '创建一个包含100个元素的数组 Dim array(0 To 99) As Integer '将数组的内容清除为0,从第一个元素开始 Clear array(0), , 100 * SizeOf(Integer) '赋值20个字节的内存 Dim As Byte Ptr p = Allocate(20) '将前十个字节中的每一个设置为0 Clear *p, 0, 10 '将接下来的十个字节中的每一个设置为42 Clear p[10], 42, 10 '检查赋值的字节的值 For i As Integer = 0 To 19 Print i, p[i] Next '释放内存 Deallocate p Swap 交换两个变量的值(直接交换指针,不交换数据,速度快) '使用交换命令2个数字: Dim a As Integer, b As Integer Input "输入一个数字:"; a Input "输入另一个数字:"; b If a > b Then Swap a, b Print "数字按升序排列:" Print a, b Poke 将值赋值给内存中的位置。(写入内存) Dim i As Integer, p As Integer Ptr p = @i Poke Integer, p, 420 Print Peek(Integer, p) 会产生输出: 420 Peek 在内存中的地址获取任意类型的值(读取内存) Dim i As Integer, p As Integer Ptr p = @i Poke Integer, p, 420 Print Peek(Integer, p) 将产生输出: 420 SAdd 返回一个指向字符串变量数据的指针 Dim s As String Print SAdd(s) s = "你好" Print SAdd(s) s = "abcdefg,1234567,54321" Print SAdd(s) 远程内存读写 就是读写其它软件(不是自己进程)的内存 读进程内存 Dim by(1023) as ubyte MEM_Get_ANY(进程ID,读地址,@by(0),1024 ) 写进程内存 Dim by(1023) as ubyte MEM_Write(进程ID,地址,@by(0),1024)
2026年-1月-21日
58 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码_数组
数组是一种基础而强大的数据结构,它允许你存储一系列相同类型的值。在编程中,数组的使用非常广泛,可以用来实现各种算法和数据处理任务。这里我将为你提供一个基本的数组编程教程,涵盖数组的基本概念、声明、初始化、访问、遍历以及一些常见操作。 1. 数组的基本概念 数组是一种线性数据结构,它允许你以索引(通常是整数)访问元素。数组中的每个元素可以通过计算偏移量来快速访问,这使得数组成为处理大量数据时的理想选择。 2. 数组的声明与初始化 静态数组 在大多数编程语言中,你可以在声明数组时指定数组的大小(即数组可以存储的元素数量)。 Dim 数组(99) As Long 从 0 开始到 99 可以保存 100个数据 Dim 数组(10 to 20) As Long 从 10 开始到 20 可以保存 11 个数据 动态数组 即数组的大小可以随着元素的增加或删除而自动调整。 Dim 数组() As Long 刚声明的数组是未初始化状态,然后需要使用数组时,随时改变大小,此时原来有数据将会全部清空 ReDim 数组(99) 要想保留原来数组的内容,需要 ReDim Preserve 数组(99) 让初始化的动态数组为未初始化状态 Erase 数组 数组初始化赋值 就是声明数组同时给数组赋值,都是静态数组,动态不可以。 如果没搞初始化赋值,数组的值,字符为空,数组为0 Dim 字符数组(4) As String={"11","22","33","44","55"} Dim 数值数组(4) As Long = {11, 22, 33, 44, 55} Dim 根据参数来定大小数组(...) As Long = {11, 22, 33, 44, 55,66} 3. 访问数组元素 通过索引来访问数组元素。索引通常是从0开始的。 dim aa as long = 数组(1) 数组(1) =aa 4. 遍历数组 遍历数组意味着按顺序访问数组中的每个元素。这通常通过循环来实现。 Dim 数组(99) As Long, i As Long For i = 0 To 99 数组(i) = Rnd *100 Next For i = 0 To 99 Print i, 数组(i) Next 4. 检索数组大小 LBound 返回数组维度的下限 UBound 返回数组维度的上限 Dim 数组(10 To 20) As Long Print LBound(数组),UBound(数组) 打印结果: 10,20 假如动态数组未初始化,返回 -1 Dim 数组() As Long Print LBound(数组),UBound(数组) 打印结果: -1,-1 4. 遍历数组 4. 遍历数组 5. 数组的常见操作 插入元素:在数组中添加新元素可能需要移动其他元素以为新元素腾出空间,通常用于动态数组。 Dim 数组() As Long, i As Long, u As Long ReDim 数组(100) u=UBound(数组) '获取数组下标 ReDim Preserve 数组(u+1) '增加一个数组并保留原来数据 '假如在50索引插入数组 '腾出50索引空间 For i = u To 50 setp -1 Swap 数组(i),数组(i+1) Next 数组(50) =999 删除元素:从数组中移除元素,并可能需要重新排列剩余元素。 Dim 数组() As Long, i As Long, u As Long, x as long ReDim 数组(100) '假如要删除50索引 x =50 u = UBound(数组) '获取数组下标 If x < 50 Then For i = x To u -1 Swap 数组(i),数组(i+1) Next End If If u = 0 Then Erase 数组 '没数组了 Else ReDim Preserve 数组(u-1) '删除一个数组并保留原来数据 End If 搜索元素:在数组中查找特定元素的索引或是否存在该元素。 Dim 数组(100) As Long, i As Long For i = 0 To UBound(数组) If 数组(i) = 99 Then '找到数据,退出循环 Exit For End If Next 排序:将数组中的元素按照一定顺序排列。 数值类型排序 Dim 数组(100) As Long QuickSortLong(数组(), LCase(数组), UBound(数组)) 字符串类型排序 Dim 数组(100) As String QuickSortStr(数组(), LCase(数组), UBound(数组)) 其它类型排序,需要自己写算法了,反正不存在通用的排序 超范围使用数组 超过声明的数组范围,软件将会崩溃 Dim 数组(1) As Long Print 数组(2) ******软件会崩溃***** 当你的软件发生崩溃时,大多数原因,就是数组超范围使用了。
2026年-1月-21日
63 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码_数学
都是用来参与数学计算的函数,了解函数名和功能即可,有需要就拿来用,不需要也不用死记硬背。 代数函数 函数名 说明 [Int] 返回数值的整数部分 [Fix] 返回一个数字的整数部分,向零舍入 [Sgn] 返回数字的符号部分 [Abs] 计算一个数字的绝对值 [Frac] 返回数字的小数部分 [Exp] 返回 e 的给定数值表示多少次幂。 [Log] 返回给定数字的自然对数 [Sqr] 返回数字的平方根 几何函数 函数名 说明 [Sin] 返回一个角度的正弦 [Asin] 找出数字的反正弦 [Cos] 返回角度的余弦值 [Acos] 取回一个角的反余弦 [Tan] 返回角度的切线 [Atn] 返回数字的反正切 [Atan2] 返回比例的反正切 其它 函数名 说明 [Randomize] 种子随机数发生器 [Rnd] 返回一个随机的 Double 数值,范围在 [0, 1]之间
2026年-1月-21日
57 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码_运算符
运算符是用于执行程序代码运算的符号,它们会针对一个或多个操作数进行运算。运算符的种类繁多,包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。下面将详细介绍这些运算符的基本概念和用法。 1. 算术运算符 算术运算符用于执行基本的数学运算,包括加(+)、减(-)、乘(*)、除(/)和取模(%)。 加(+):将两个操作数相加。 dim aa as long = 1+2 ,bb as long = 3+4 aa += bb print aa ,aa+bb 减(-):从第一个操作数中减去第二个操作数。 dim aa as long = 1-2 ,bb as long = 3-4 aa -= bb print aa,aa-bb 乘(*):将两个操作数相乘。 dim aa as long = 1*2 ,bb as long = 3*4 aa *= bb print aa,aa*bb 除(/):当两个操作数都是整数时,执行整数除法,结果也是整数,小数部分被丢弃;当操作数中包含浮点数时,执行浮点数除法,结果保留小数部分。 dim aa as long = 1/2 ,bb as long = 3/4 aa /= bb print aa,aa/bb 取模(Mod):返回两个整数相除的余数。注意,负数取模的规则是结果的正负号由第一个操作数的正负号决定。 dim aa as long = 1 mod 2 ,bb as long = 3 mod 4 aa Mod= bb print aa,aa mod bb 次方(^):计算数的指数次方 dim aa as long = 1 ^ 2 ,bb as long = 3 ^ 4 aa ^= bb print aa,aa ^ bb 2. 关系运算符 关系运算符用于比较两个操作数的大小关系,包括大于(>)、小于(<)、等于(=)、不等于(<>)、大于等于(>=)和小于等于(<=)。 这些运算符返回的结果是布尔值(true或false),用于条件判断。 if 11<>22 or 3>6 then ....... aa = 11= 22 '前面等号是 赋值,后面等号是关系运算 3. 逻辑运算符 逻辑运算符用于执行布尔逻辑运算,包括逻辑与(And)、逻辑或(OR)和逻辑非(Not)。 逻辑与(And):当且仅当两个操作数都为真时,结果才为真。 a = 0 : b = 0 :print (a And b) '输出为 0 a = 1 : b = 0 :print (a And b) '输出为 0 a = 0 : b = 1 :print (a And b) '输出为 0 a = 1 : b = 1 :print (a And b) '输出为 1 逻辑或(Or):当至少有一个操作数为真时,结果就为真。 a = 0 : b = 0 :print (a Or b) '输出为 0 a = 1 : b = 0 :print (a Or b) '输出为 1 a = 0 : b = 1 :print (a Or b) '输出为 1 a = 1 : b = 1 :print (a Or b) '输出为 1 逻辑非(Not):将操作数的布尔值取反。 a = 0 : print Not(a) '输出为 1 a = 1 : print Not(a) '输出为 0 逻辑与或(Eqv) a = 0 : b = 0 :print (a Eqv b) '输出为 1 a = 1 : b = 0 :print (a Eqv b) '输出为 0 a = 0 : b = 1 :print (a Eqv b) '输出为 0 a = 1 : b = 1 :print (a Eqv b) '输出为 1 逻辑蕴含(Imp) a = 0 : b = 0 :print (a Imp b) '输出为 1 a = 1 : b = 0 :print (a Imp b) '输出为 0 a = 0 : b = 1 :print (a Imp b) '输出为 1 a = 1 : b = 1 :print (a Imp b) '输出为 1 逻辑异或(Xor) a = 0 : b = 0 :print (a Xor b) '输出为 0 a = 1 : b = 0 :print (a Xor b) '输出为 1 a = 0 : b = 1 :print (a Xor b) '输出为 1 a = 1 : b = 1 :print (a Xor b) '输出为 0 4. 位运算符 位运算符用于对整数类型的二进制位进行操作,包括按位与(And)、按位或(Or)、按位异或(Xor)、按位取反(Not)、左移(Shl)和右移(Shr)。 按位与(And):对两个操作数的每一位执行逻辑与操作,如果两个对应位都是1,则结果位为1,否则为0。 按位或(Or):对两个操作数的每一位执行逻辑或操作,如果两个对应位至少有一个是1,则结果位为1,否则为0。 按位异或(Xor):对两个操作数的每一位执行逻辑异或操作,如果两个对应位不同,则结果位为1,如果相同,则结果位为0。 按位取反(Not):对操作数的每一位执行逻辑取反操作,将1变为0,将0变为1。 左移(Shl):将操作数的二进制位向左移动指定的位数,左边抛弃,右边补0。 右移(Shr):将操作数的二进制位向右移动指定的位数,具体是算数右移还是逻辑右移取决于编译器,算数右移左边用原来的符号位填充,逻辑右移左边用0填充。 5. 赋值运算符 赋值运算符用于将右侧操作数的值赋给左侧的变量,包括简单赋值(=)和复合赋值运算符(如+=、-=、*=、/=等)。 简单赋值(=):将右侧操作数的值赋给左侧的变量。 复合赋值:在赋值的同时进行算术或位运算,如a+=b等价于a=a+b。 6. 条件运算符(三目运算符) 条件运算符是唯一的三元运算符,格式为 aa = iif(条件表达式, 表达式1 , 表达式2) 如果条件表达式的值为真(非零),则整个条件表达式的值为表达式1的值;如果为假(零),则值为表达式2的值。 7. 其他运算符 除了上述运算符外,还有指针运算符(@和*)、求字节数运算符(sizeof)、强制类型转换运算符((类型))等,它们在特定场景下用于执行特定的操作。 运算符的优先级 不同运算符在表达式中的优先级不同,通常按照算术运算符、关系运算符、逻辑运算符的顺序从高到低排列。在复杂的表达式中,可以使用括号()来改变运算符的默认优先级。 操作者 描述 关联性 CAST 类型转换 N/A PROCPTR 程序指针 N/A STRPTR 字符串指针 N/A VARPTR 变量指针 N/A [] 字符串索引 Left-to-Right [] 指针索引 Left-to-Right () 数组索引 Left-to-Right () 函数调用 Left-to-Right . 成员访问 Left-to-Right -> 指向成员访问 Left-to-Right @ 的地址 Right-to-Left * 取数据值 Right-to-Left New 赋值内存 Right-to-Left Delete 取消赋值内存 Right-to-Left ^ 取幂 Left-to-Right - 求反 Right-to-Left * 乘 Left-to-Right / 除以 Left-to-Right \ 整数除法 Left-to-Right MOD 余数 Left-to-Right SHL 位左移 Left-to-Right SHR 位右移 Left-to-Right + 加 Left-to-Right - 减去 Left-to-Right & 字符串连接 Left-to-Right Is 运行时类型信息检查 N/A = 等于 Left-to-Right <> 不平等 Left-to-Right < 少于 Left-to-Right <= 小于或等于 Left-to-Right >= 大于或等于 Left-to-Right > 大于 Left-to-Right NOT 求位反码 Right-to-Left AND 位逻辑与 Left-to-Right OR 位逻辑或 Left-to-Right EQV 等价 Left-to-Right IMP 意义 Left-to-Right XOR 位异或 Left-to-Right ANDALSO 短路逻辑与 Left-to-Right ORELSE 短路逻辑或 Left-to-Right = 赋值 N/A &= 连接和赋值 N/A += 添加和赋值 N/A -= 减去和赋值 N/A *= 乘法和赋值 N/A /= 除以和赋值 N/A \= 整数分割和赋值 N/A ^= 指数和赋值 N/A MOD= 模数和赋值 N/A AND= 连接和赋值 N/A EQV= 等同和赋值 N/A IMP= 含义和赋值 N/A OR= 位或和赋值 N/A XOR= 位异或和赋值 N/A SHL= 向左移动并赋值 N/A SHR= 向右移动并赋值 N/A LET 赋值 N/A LET() 赋值 N/A 注意事项 在使用运算符时,需要注意操作数的类型和范围,以避免数据溢出或类型不匹配的问题。 逻辑运算符和关系运算符的结果为布尔值,但在FB语言中通常用整数0表示假,非0值表示真。 在编写代码时,应注意运算符的优先级
2026年-1月-21日
61 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码_程序执行流程
执行代码时,是从 第1行执行到最后1行,这就是程序,按照顺序执行,而下面的语句可以改变代码执行的位置,才使程序有了灵魂,好像有“智能”一样,虽然这个“智能”是代码设定好的,但也让大家把计算机称为电脑。 if ... Then 条件分支语句 根据条件判断,然后执行相关代码 Dim aa As Long = 100 If aa = 100 Then Print "aa=100" Else Print "aa<>100" End If 如果执行的代码就一行的,我们可以用单行模式 Dim aa As Long = 100 If aa = 100 Then Print "aa=100" Else Print "aa<>100" 还可以多个条件判断 Dim aa As Long = 100 If aa = 100 Then Print "aa=100" ElseIf aa = 50 Then Print "aa=50" ElseIf aa = 60 Then Print "aa=60" Else Print "其它情况" End If 还有多条件判断 Dim aa As Long = 100, bb As Long = 50 If aa = 100 Or bb = 50 Then Print "aa=100 或者 bb=50" If ... Then 之间,属于条件判断,也可以进行逻辑判断,还可以写复杂的表达式 If 123*58+55= 33 And 1/55<>rnd Then **** 其中涉及到的 +-*/ 算术运算符,And Or 等逻辑运算符,请参考运算符篇 多条件选择 Select 某些特殊的多条件,使用 if ... Then 的代码比较麻烦,因此在这个基础上扩展出 Select 语句 'If...Then 的写法 If aa = 1 Then Print 1 ElseIf aa = 2 Then Print 2 ElseIf aa = 3 Then Print 3 Else Print 4 End If 'Select 的写法,和 If...Then 功能相同,但Select人类看代码比较舒服。 Select Case aa Case 1 Print 1 Case 2 Print 2 Case 3 Print 3 Case Else Print 4 End Select 还有特殊写法 Select Case aa Case 1, 3, 4 '多个条件写法 Print 1 Case 2 : Print 2 '单行写法 Case 3 To 10 '范围写法 Print 3 End Select For..Next 范围循环 有些代码,需要重复执行,就会用到循环语句 Dim i As Long For i = 1 To 10 '表示 i 从 1 开始 ,循环到 10 ,i 值每循环1次增加 1 Print i '循环执行的代码 Next 循环还可以指定每次增加的量 Dim i As Long For i = 1 To 10 Step 2 '表示 i 从 1 开始 ,循环到 10 ,i 值每循环1次增加 2 Print i '循环执行的代码 Next 结果:1,3,5,7,9 还可以从大到小循环 Dim i As Long For i = 10 To 1 Step -1 '从10开始,循环到1,每次 -1 Print i Next 循环变量,可以直接写在循环语句里,不需要Dim 定义 For i As Long = 10 To 1 Step -1 Print i Next 有时候需要根据条件,直接退出循环 For i As Long = 10 To 1 Step -1 If i = 5 Then Exit For '条件成立,跳出循环,跳到 Next 的下一行执行 Print i Next 假如有多循环嵌套,退出循环还可以跳出N层循环 For y As Long = 1 To 5 For x As Long = 1 To 3 If x = 3 And y = 3 Then Exit For, For '条件成立,跳出多层嵌套循环 Print x,y Next Next 有时候,还可以根据条件,直接进入下一个循环 For i As Long = 10 To 1 Step -1 If i = 5 Then Continue For '条件成立,跳到循环头 For 执行 Print i Next Do..Loop 无限循环 这是无限循环,循环到天荒地老,表现为软件无反应,CPU占用高 Dim i as long Do i += 1 '无限执行到天荒地老 Loop 因此,我们必须搞个条件,达到条件退出循环,但你必须要预计到,条件肯定有成立的时候,不然永不成立,就变成无限循环了,执行到天荒地老 Dim i As Long Do i += 1 If i > 100 Then Exit Do '超过100就退出 Loop 条件可以直接和 Do 结合,条件成立退出循环 Dim i As Long Do Until i>10 '条件成立就10退出循环 i += 1 Loop 条件可以直接和 Do 结合,条件成立,执行循环,条件不成立,退出循环 Dim i As Long Do While i < 10 '条件成立执行循环,条件不成立退出循环 i += 1 Print i Loop 以上是先判断条件,还有和 Loop 结合,先循环后条件。 Dim i As Long Do i += 1 Loop Until i > 10 '条件成立退出循环 Do i += 1 Loop While i < 10 '条件成立执行循环,条件不成立退出循环 本循环,也有跳过本循环语句 Dim i As Long Do i += 1 If i=5 Then Continue Do '跳到DO头执行 Loop Until i > 10 '条件成立退出循环 还有,多嵌套DO循环时,退出N个 DO 循环 Dim i As Long Do Do Do i += 1 If i = 5 Then Exit Do, Do, Do '跳到多个do循环 Loop loop Loop While..Wend 条件循环 本循环和 Do While 语句一样功能,看自己喜欢用什么语句就用什么 Dim i As Long While i < 5 i+=1 Wend 当然该循环也有退出循环和跳到循环头的语句 Exit While '退出循环 Continue While '跳到循环头 子程序 当代码越写越多,就会让整体代码越难阅读和管理,我们需要有章有节,那样条理分明。 编程中的子程序(Subroutine)或函数(Function)是编程中非常重要的一部分,它们帮助你将代码分割成可管理、可重用的部分。这不仅能提高代码的可读性,还能减少代码冗余,使得程序更容易维护和修改。下面我将通过一些基本的概念和示例来介绍子程序的概念和使用。 1. 子程序的基本概念 函数(Function):一个具有特定功能的代码块,可以接收输入参数,执行一系列操作,并返回一个值给调用者。 子程序(Subroutine)或过程(Procedure):与函数类似,但它不返回任何值给调用者。主要用于执行一系列操作。 2. 为什么要使用子程序 模块化:将复杂的问题分解为较小的、易于管理的部分。 重用性:避免重复编写相同的代码。 可读性:使得代码更易于理解和维护。 易于调试:当出现问题时,可以更容易地定位到特定的子程序。 3. 编写子程序的基本步骤 3.1 定义子程序 函数:通常包括返回类型、函数名、参数列表(可选)和函数体。 子程序:包括子程序名、参数列表(可选)和子程序体。 3.2 编写子程序体 在子程序体内,你可以编写执行特定任务的代码。对于函数,你需要确保最后有一个返回语句,以返回适当类型的值。 3.3 调用子程序 在程序的其他部分,你可以通过指定子程序名(和必要的参数)来调用它。 4. 示例 Sub 我的子程序() ’ 这是子程序头 Print "执行子程序" End Sub '这是子程序尾 我的子程序() ‘ 直接写 子程序的名称来调用执行子程序 子程序可以设置参数,我们调用时传递参数给子程序 Sub 我的子程序(参数1 As Long ) Print "执行子程序",参数1 End Sub 我的子程序(99) 子程序可以提前结束,用 Return 直接返回 Sub 我的子程序(参数1 As Long) If 参数1 = 99 Then Return Print "执行子程序", 参数1 End Sub 我的子程序(99) 当子程序要返回数据时,就称为“函数”,和普通子程序不同于,它会返回数据 Function 我的子程序函数() As Long Return 10 End Function Print 我的子程序函数() 下面我们写一个加法函数 Function 我的加法函数(aa As Long ,bb As Long ) As Long Return aa+bb End Function Print 我的加法函数(5,10) 当传递的参数,在子程序中被修改,影响到调用者 Sub 我的子程序(数值参数 As Long,文字参数 As String ) 数值参数 = 100 文字参数 ="1111" End Sub Dim aa As Long=11, bb As String ="内容" 我的子程序(aa, bb) Print aa,bb '打印后会发现,数值内容没变,文字内容变了, 当你需要明确,修改变量后不影响调用的变量,和一定要影响 ByRef 影响调用者 ByVal 不影响调用者 Sub 我的子程序(ByRef 数值参数 As Long,ByVal 文字参数 As String ) 数值参数 = 100 文字参数 ="1111" End Sub Dim aa As Long=11, bb As String ="内容" 我的子程序(aa, bb) Print aa,bb 传递数组时,必须写上 () 来表示数组,数组必然影响调用者,无法使用不影响的 Sub 我的子程序(数组参数() As Long) Print 数组参数(0) End Sub Dim aa(100) As Long 数组参数(0)=99 我的子程序(aa())
2026年-1月-21日
66 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码_变量和数据类型
在编程中,变量是一个用于存储数据值的命名容器。 一、作用 变量使得程序员能够在程序运行过程中存储和操作各种数据。它就像是一个可以随时存取物品的盒子,你可以把不同类型的数据放进去,也可以随时取出查看或修改。比如在一个记录学生成绩的程序中,可以用变量来存储学生的姓名、分数等信息。 二、特点 变量需要有一个唯一的名称,以便在程序中识别和引用它。变量名通常由字母、数字和下划线组成,但不能以数字开头。例如,“score”“student_name” 都是合法的变量名。 存储特定类型的数据,常见的有整数类型、浮点数类型、字符类型、字符串类型等。你必须根据要存储的数据类型来声明变量。比如,如果你要存储一个整数,就可以声明一个整数类型的变量;如果要存储一段文本,就可以使用字符串类型的变量。 可以被修改,在程序运行过程中,变量的值可以根据程序的逻辑进行修改。例如,在一个计数器程序中,变量可以随着计数的增加而不断改变其值。 三、声明和赋值 在大多数编程语言中,使用变量之前需要先进行声明。声明变量包括指定变量的类型和名称。 声明后,可以给变量赋值。赋值操作是将一个具体的值存储到变量中。 四、变量的作用域 变量的作用域指的是变量在程序中可以被访问的范围。一般来说,变量可以在声明它的代码块(如函数、循环等)内被访问。超出这个范围,变量就不可见了。例如,在一个函数内部声明的变量,通常只能在该函数内部使用,在函数外部无法访问。 变量是编程中非常重要的概念,它为程序员提供了一种灵活、方便的数据存储和操作方式。 变量声明 变量使用前,必须先声明,以下是声明一个名为:aa 的变量,类型为 Long (32位整数) Dim aa As Long 声明变量时,可以设置默认值,如果没设置,表示为 0 Dim aa As Long = 100 一行声明中,可以声明多个变量,中间用 “,” 分割,变量类型可以各不相同 Dim aa As Long ,bb As Long,cc As Single 当变量类型相同,可以简化代码,以下是同类型声明 Dim As Long aa,bb,cc,ee 同类型声明,当然也可以设置默认值 Dim As Long aa,bb=100,cc=111,ee 还可以声明数组,数组分固定数组和动态数组 Dim aa(100) As Long '此为固定数组,默认从 0开始。 代码执行时,不可以改变数组 Dim bb() As Long ‘此为动态数组,代码执行时,随时改变数组大小。 redim bb(55) '为动态数组设置数组大小,原先内容被清除为0 redim Preserve bb(55) '为动态数组设置数组大小,原先内容被保留 数组,还可以设置 上标和下标 Dim aa(10 to 100) As Long '此为固定数组,从 10 开始到 100。 代码执行时,不可以改变数组 Dim bb() As Long ‘此为动态数组,代码执行时,随时改变数组大小。 redim bb( 5 to 55) '为动态数组设置数组大小,原先内容被清除为0 redim Preserve bb( 5 to 55) '为动态数组设置数组大小,原先内容被保留 数组声明时,也可以设置默认值 Dim aa(3) As Long = {111,222,333,444} '需要赋值和空间对应个数 Dim bb(...) As Long = {111,222,333,444,555} '无需对应个数,根据赋值内容,自动设置数组大小 静态变量,Dim 是程序执行后,下次再执行到这里,变量就清空,但静态会被保留。 Static aa as long '和Dim 同样写法,参考Dim ,这里不做阐述,和 Dim 不同的是,Static 声明的变量,执行后,原内容被保留,不会丢失。 也可以用简化写法 DimS aa as long 全局变量,所有地方可以共用,Dim 是局部变量,只用于自己代码块中,跳出此代码块,就消失。 Dim Shared aa As Long ' 这是全局变量,所有代码块中都可以使用,和 Dim 语句同样用法,参考Dim ,这里不做阐述 也可以用简化写法 DimP aa as long 常量声明,执行代码期间不可以修改这个值 Const Red = 12345 Const Black As UInteger = RGB(0, 0, 0) Const Text = "这是黑色bkgnd上的红色文字。" 数据类型 数值类型,可以分为:整数类型和浮点类型 '整数类型,位数表示是二进制的数量,只是个容器,保存数值有限制,假如超出范围就溢出,溢出部分会丢失 Dim a1 As Byte '有符号8位整数 -128 ~ 127 占用内存1个字节 Dim a2 As UByte '无符号8位整数 0 ~ 255 占用内存1个字节 Dim a3 As Short '有符号16位整数 -32768 ~ 32767 占用内存2个字节 Dim a4 As UShort '无符号16位整数 0 ~ 65535 占用内存2个字节 Dim a5 As Long '有符号32位整数 -2147483648 ~ 2147483647 占用内存4个字节 Dim a6 As ULong '无符号32位整数 0 ~ 4294967295 占用内存4个字节 Dim a7 As Integer '有符号32/64位整数 32位软件时是 Long 64位软件时是 LongInt Dim a8 As UInteger '无符号32/64位整数 32位软件时是 ULong 64位软件时是 ULongInt Dim a9 As LongInt '有符号64位整数 -9223372036854775808 ~ 9223372036854775807 占用内存8个字节 Dim a10 As ULongInt '无符号64位整数 0 ~ 18446744073709551615 占用内存8个字节 '浮点类型,属于近似值,不是精确数值。数值越大,误差越大。 Dim b1 As Single '32位浮点数,占用内存4个字节 1.401298E-45 ~ 3.402823E+38 Dim b2 As Double '64位浮点数,占用内存8个字节 4.940656458412465E-324 ~ 1.797693134862316E+308 字符类型 '说明: * 100 表示空间大小,可以容纳多少个文字,100表示容纳99个文字,最后1个是系统自动补0 Dim aa As ZString * 100 'ASCII 标准编码文字,一个中文会占用2个ASCII码。1个ASCII码1个字节。 aa = "aabb我是文字" '给它超过空间的文字,超过部分会被丢弃。1个中文占2个空间,1个空间1个字节 Dim bb As WString * 100 'Unicode 标准编码文字,不管英文中文占1个UNICODE码。1个UNICODE码2个字节。 bb = "aabb我是文字" '给它超过空间的文字,超过部分会被丢弃。不管中英文都占1个空间,1个空间2个字节 '以上文字,不可以包含为 0 编码,遇到 0编码就截断。 Dim cc As String '默认是ASCII标准编码文字,可以自由容纳任意个文字,其实这个是数据容器,可以包含 0 编码。 cc = "aabb我是文字" '不限制文字个数,受内存限制,超过 1.8G 软件就崩溃。 主:As String 是一个数据容器,默认为ASCII标准编码文字。以后编程中会经常遇到,使用这个类型用来装数据用,而不是文字。 用户定义的类型 就是把标准类型组合在一起,成为一个类型组,各个标准类型成为其类型的成员 Type 用户自定义类型名 aa As Long bb As Single cc As String End Type Dim ee As 用户自定义类型名 ee.aa = 100 ee.bb = 3.14 ee.cc = "文字" 成员中也可以用固定数组,动态数组 Type 用户自定义类型名 aa(10) As Long bb(any) As Single '动态数组,不可以用 () 而是用 (any) End Type Dim ee As 用户自定义类型名 ee.aa(1) = 100 redim ee.bb(11) '分配空间 ee.bb(1) = 3.14
2026年-1月-21日
72 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码_代码调试
代码调试 编写代码过程中,难免发生各种错误,就算编程几十年皆如此,学习编程的过程,很大部分就是在学习如何解决各种错误的过程,以及后面代码写的越来越多,产生的逻辑关系越来越复杂,造成的各种BUG随之也越来越多,因此 写代码1小时,解决BUG 10小时都是正常现象。 调试代码方法 在 VisualFreeBasic 侧边栏中,打开代码便签,输入代码,按 F5 执行代码,初学代码时,这个工具非常好用 或者新建一个工程,窗口上放一个按钮,双击按钮,在按钮事件里写代码测试。 然后执行软件后,打印输出的内容会在 VisualFreeBasic 底部输出窗口中显示。 底部还有一个“立即”窗口,这个是执行 VBScript 代码,输入代码打回车后,结果就显示在下一行。属于单行执行,不需要打印语句,直接把结果显示出来。 编译错误 编译,就是把代码翻译成计算机能执行的 2进制指令,翻译过程中,编译器会检查你写的代码,发现错误无法编译,就会报告出来。当在VFB工程里编译时,发生错误,就会跳转到提示错误的代码行中,由于错误种类比较多,下面只举例常见的错误。 错误42:变量未声明 每个文字,必须先定义为某个东西,比方 变量名、函数名、等等,编译才能知道,遇到不认识的,编译器就不知道这个是干嘛的,因此先要定义后才能使用 错误58:类型不匹配 类型本来是字符串,你给个数字,是不可以的,必须是对应的类型 错误181:无法赋值 变量是数值,无法赋值字符串 错误类型很多,而且大多和我们理解的解释都不同,因此遇到理解不了,解决不了的请在QQ群里提出,大家会帮你解决。 打印输出 电脑执行代码,有什么结果,我们是无法人类是不可能知道的,因此我们需要打印结果,来调试代码,是否和我们自己预期的一样。 dim a as long a=1+2+3 print a '打印 a 变量的结果,调试代码结果是否和我们的预期一样 源码跟踪调试 此调试主要用来跟踪代码执行逻辑,一般都用打印输出来调试。 点击VFB中爬虫按钮,启动调试模式 在需要跟踪的代码行点击【断点】,代码左边就出现红点,再点【断点】按钮则取消断点 当代码执行到这一行时,软件将会中断,停在这一行,等待你操作,可以点【步进】或【步过】。 红框中,显示了各变量的当前值,具体操作非常多,需要自行探索。 汇编调试 每个生成的软件,都是会变成汇编执行,以上其它调试手段都无法解决问题,就要用上汇编调试了。 在工具菜单里,提供了汇编调试,分别为 32位和64位软件调试 这个调试器功能多,需要自己在网上找视频教程学习。 绝大多数,我们都是使用打印输出来调试代码,其它调试是打印输出无法解决时才考虑使用。
2026年-1月-21日
64 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码_FreeBasic语法
基础语法 天下编程为一家,各种编程语言只是表达方式不同,但意思都是一样的,如同我们中华文化,有众多的方言一样。 因此,学编程主要学的是编程思考方式(我也不知道如何去表达,只是一种感觉),只要你学会了一种编程,再去学别的编程语言,去学一下该语言的语法,大差不差的都会写代码了。 FreeBasic语法,属于Basic语言的分支,其基础语法和VisualBasic、QBasic、VBScript都有 99% 以上相同。 代码格式 代码以标准文本方式显示,每一行代表一个执行单元,以下是2行执行单元的代码 print "我是代码1" print "我是代码2", 1,2 有时候,一行代码写的很长,可以用 “_” 来续行,就是多个显示代码行为一个执行单元,下面例题和上面例题一样 print "我是代码1" print "我是代码2", _ 1,2 有时候感觉多行代码很短小,可以用一个显示行来表示 多个执行单元,就用“:” 来分割,下面例题是2个执行单元 print "我是代码1" : print "我是代码2", 1,2 分隔符 逗号(,):用于分隔变量声明或函数参数。 函数名(参数1,参数2,参数3) 冒号(:):用于语句分割。 代码1 : 代码2 : 代码3 括号: 圆括号(())用于分组表达式、函数调用和数组。 函数(参数1,参数2,参数3) aa=数组(1) 花括号({})用于数组变量初始化赋值。 Dim aa(2) as long = {1,2,3} 方括号([])用于指针数组。 aa=某指针[1] 注释 通常代码写好后,需要加一些说明,注释一下代码要表达的什么,用单引号 " ' " ,单引号后面的文字全是注释 print "我是代码" '我是注释,后面全是 还有一个注释语句,通常为了方便,一般都是用单引号代替。 print "我是代码" Rem 我是注释,后面全是 还有一个多行注解,任意中间注解,但感觉这样注释比较乱,不推荐使用,很少见到用这个的例题代码。 /’ 这里是注解,多行注解 这里的也是注解 任何行注解 '/ print "我是代码a", /' 我是中间注释 '/ "我是代码b" /' 我是中间注释 '/ ,"我是代码c" 标识符 标识符是程序中变量、函数、数组等的名字。标识符由字母(大写或小写)、数字和下划线组成,但第一个字符必须是字母或下划线,不能是数字。 一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。 C 标识符内不允许出现标点字符,比如 @、$ 和 %。C 是区分大小写的编程语言。 mohd zara abc move_name a_123 myname50 _temp j a23b9 retVal aaa_ 注意,原版 FreeBasic 是不支持中文的,而 VisualFreeBasic 的环境中,支持中文代码 中文代码 中文变量名 中文函数名 中文类名 常量 常量是固定值,在程序执行期间不会改变。 常量可以是整型常量、浮点型常量、字符常量、枚举常量等。 const MAX = 100 ' 整型常量 const PI = 3.14 ' 浮点型常量 const NEWLINE = "字符" '字符常量 字符串字面量 字符串字面量是由双引号括起来的字符序列。 字符串变量名 ="我是字符串" 当字符串里有双引号,那么用2个双引号表示1个双引号 字符串变量名 ="我是字符串,""前面2个双引号表示1个双引号字符" 还有可能需要不可显示字符,就用转义字符,在前面搞一个感叹号”!“ 字符串变量名 =!"我是字符串,\"前面1个双引号字符" 转义符 表示的字符 \a 嘟 \b 退格 \f 换页符 \l 或 \n 换行符 \r 回车 \t 制表符 \unnnn unicode字符表示为十六进制文本 \v 垂直标签 \nnn ascii的十进制字符 \\&hnn ascii字符在十六进制 \\&onnn ascii字符在八进制 \\&bnnnnnnnn ascii char二进制 \\ 反斜线 \"(双引号) 双引号 \' 单引号 运算符 运算符用于执行各种操作,如算术运算、逻辑运算、比较运算等。 FB 语言中的运算符种类繁多,详细见FB帮助,常见的包括: 算术运算符:+, -, *, /, % 关系运算符:=, <>, >, <, >=, <= 逻辑运算符:And, or, Xor 位运算符:And, Not, Or, Xor 赋值运算符:=, +=, -=, *=, /=, %= 其他运算符:sizeof, @, *, ->, . dim as long a = 5, b = 10 '赋值 dim sum as long = a + b ' 使用算术运算符 + dim isEqual as Boolean = (a = b) ' 使用关系运算符 = 关键字 关键字,一般是FB语句,不能作为常量名、变量名或其他标识符名称。如: Dim As do if for long ....... 等等非常多,详细看帮助的原生语句
2026年-1月-21日
92 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic代码
本编程语言是:FreeBasic ,属于Basic语言的分支,其基础语法和VisualBasic、QBasic、VBScript都有 99% 以上相同。 控件部分,可以自己拖拖点点,用用几个月,都会搞熟悉,而编程语言部分,你必须天天敲代码,每个语句,每行代码必须一个一个学习才行。 语言参考 [关键字 - 按字母顺序排列] [关键字 - 函数] [图形的关键字] [运算符列表] 变量和数据类型 [变量声明] [用户定义类型(或 类)] [标准数据类型] [标准数据类型限制] [数据类型的转换] 运算符 [运算符列表] [运算符优先级] [按位运算符 和真值表] 语句 [控制流程] [过程(函数)] [模块化] 其它 [预处理] [字符串中的转义序列] [元-声明] [内部定义] [错误处理] [内联汇编] Runtime Library 运行库参考 [数组函数] [位 操作] [控制台函数] [日期和时间函数] [错误处理函数] [文件 IO 函数] [数学函数] [内存函数] [操作系统函数] [字符串函数] [线程库函数] [用户输入函数] Graphics Library 图形库参考 [2D 绘图函数] [用户输入函数] [屏幕函数] [内置图形库] [键盘扫描码] [默认调色板]
2026年-1月-21日
193 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_Custom 自定义
此控件不是一个固定的控件,可以自由设置成已在系统中注册的任何控件 系统中注册的控件 设置类名,只要是系统内注册的类名,就变成相关控件 WIn操作系统内置控件的做法,就是类名。那些WIn系统的标准控件,每一个控件都拥有自己独一无二的类名,当你设置的类名与之对应,那这个控件就变成此控件了。 当然,这里并不是为了WIn系统里标准控件搞的这样的万能控件,而是为了第三方提供的控件使用。 第三方提供WIn系统标准控件,会向系统注册一个控件类名。我们设置此类名,那么这个控件就成为第三方控件了。 第三方控件,比方:火花编辑器。当你下载火花编辑器后,有一个DLL文件。 在VFB中,入口函数中加载这个DLL,然后这个控件类名设置成火花编辑器的类名(具体类名,就要看第三方控件的开发文档了),运行软件后,就有这个控件了。 当然不懂这些没关系,反正用不到。 比方 Button 按钮 Edit 文本框 用窗口做控件(用户控件) 先在工程中添加一个窗口,比如:Form2 设置该窗口为子窗口 再在本控件的子窗口中输入:Form2 至此,Form2 就成为控件了。 也可以作为真实容器控件使用。 用户控件,控件变量 VFB中没有模块变量,就是单独属于控件自己的变量,就算系统控件也没有。所有变量都是共享的,比方,一个窗口中有多个相同控件存在,其变量是共享的,而非私有的。 实现私有控件变量,需要用以下代码: Dim fp As FormControlsPro_TYPE Ptr = vfb_Get_Control_Ptr(hWndControl) If fp Then fp->CtlData(0 - 99) '100个变量,供开发控件中,控件内部使用 fp->UserData(0 - 99) '100个变量,用户使用控件中使用。 End If 用户控件,控件事件 用户使用时,就一个事件,实现事件的方法,就是写控件者向自己发送消息 Function Form1_Custom1_SubClassProcess(hWndControl As hWnd, wMsg As UInteger, wParam As wParam, lParam As lParam) As LResult Select Case wMsg Case WM_USER+100 事件1 Case WM_USER+101 事件2 End Select Function = CallWindowProc(GetPropW(hWndControl, "vfb_SubClassProcess") ,hWndControl ,wMsg ,wParam ,lParam) '给原处理地址处理消息 ,这是必须的,不然就吃掉消息。 End Function 写控件时,触发控件 SendMessage( hWndControl , WM_USER+100 , wParam , lParam ) 用户控件,控件功能 用户需要修改或执行控件功能,也是发消息 SendMessage( hWndControl , WM_USER+200 , wParam , lParam ) 控件窗口中,在自定义事件中 Function Form2_Custom(hWndForm As hWnd, wMsg As UInteger, wParam As wParam, lParam As lParam) As LResult Select Case wMsg Case WM_USER+200 功能或属性1 Case WM_USER+201 功能或属性2 Case WM_USER+202 功能或属性3 End Select Function = FALSE ' 若不想系统继续处理此消息,则应返回 TRUE (俗称吃掉消息)。 End Function 因为控件都是多开的,因此需要设置或执行本控件需要 Me.hWndForm = hWndForm Me.xx控件xx.hWndForm = hWndForm 然后才可以操作自己,比如: Me.Caption ="xxx"
2026年-1月-21日
53 阅读
0 评论
VisualFreeBasic编程文档
13
14
15
16
17