论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
搜索
登录
搜索
勇芳
累计撰写
331
篇文章
累计收到
0
条评论
首页
栏目
论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
自定义幻灯片
最新文章
2026-1-21
VisualFreeBasic控件_WinInet 互联网访问
这是WIn操作系统提供的网页访问功能,由VFB封装成控件使用。 这是一个功能性控件,无界面。 使用方法 使用方法很简单,就是访问一个网页,返回网页代码 Dim bb As String = WinInet1.HttpGet("http://www.yfvb.com") Dim bb As String = WinInet1.HttpPost("http://www.yfvb.com") WinInet1.HttpGetThread("http://www.yfvb.com") WinInet1.HttpPostThread("http://www.yfvb.com") 前一个是直接获取,后一个是多线程方式,当网络有卡顿,或者是下载文件时,需要比较长的时间,直接获取会发生软件假死,无反应。需要用多线程处理。 不管是多线程还是直接,接收文件时,都会产生事件 标头数据、下载开始、下载完成、文件下载中 等事件 利用事件,可以在下载文件时,提示文件进度等人性化操作 关于GET和POST 在HTTP(Hypertext Transfer Protocol,超文本传输协议)网页访问中,GET和POST是两种最常用的HTTP方法(也称为请求方法或动作),用于向服务器发送请求以获取或提交数据。尽管它们都能达到与服务器交换数据的目的,但它们在使用场景、安全性、数据传输量等方面存在差异。 GET 方法 用途:主要用于请求访问已经被URI(统一资源标识符)识别的资源,即发送一个请求来取得服务器上的某一资源。这里的资源可以是网页、图片、文档等。 特点: 数据在URL中:GET请求的数据会附加在URL之后(通过?分隔URL和传输数据,参数之间以&相连),发送的信息对所有人都是可见的(包括服务器日志、浏览器历史记录等),因此隐私性较差,且不适合用于传输敏感信息。 缓存:GET请求是可以被缓存的,而POST请求则不会。 长度限制:由于URL长度的限制,GET请求传输的数据量有限制。 无副作用:GET请求通常不会对服务器上的数据产生影响(即不会改变数据状态),仅仅是获取数据。 POST 方法 用途:主要用于向服务器提交数据,如提交表单或上传文件。POST请求的数据包含在请求体中,而不是附加在URL之后。 特点: 数据在请求体中:POST请求的数据不会附加在URL之后,而是放在HTTP请求的消息体中,对用户来说是不可见的,因此适合用于传输敏感信息。 无缓存:POST请求不会被缓存。 无长度限制:理论上POST请求的数据量没有限制,但实际应用中会受到服务器和客户端的限制。 有副作用:POST请求通常会导致服务器上的数据发生改变(例如,提交表单后数据被保存到数据库中)。 使用场景 GET:通常用于请求服务器发送资源,如请求网页、图片等,或者搜索查询等不需要修改服务器数据的场景。 POST:通常用于提交数据到服务器,如用户注册、提交表单、文件上传等需要修改服务器数据的场景。 安全性 由于GET请求的数据是明文显示在URL中的,所以不适合传输敏感信息(如密码)。而POST请求的数据在请求体中,对用户来说是不可见的,相对更安全。然而,无论是GET还是POST,都应当使用HTTPS来确保数据传输的安全性,因为HTTP本身并不加密数据。
2026年-1月-21日
256 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_MyDrawWin 窗口外框
这个是改变窗口外框的控件,放上控件后,运行才效 运行后的效果 可以在窗口属性中增加阴影,效果更好(注意:是主窗口的设计属性,不是控件的) 运行效果 可以修改窗口外壳颜色已经高度 还增加2个常用的窗口按钮,已经可以设置更多小按钮 注意: 按钮ID 设置大点,不然可能被其它控件占用,发生重叠错误 MyDrawWin1.nButID(0 到 9 共10个) = 10001 MyDrawWin1.nButTxt(0 到 9 共10个) = "按钮文字" 按钮点击事件,在主窗口的事件中 Sub Form1_WM_Command(hWndForm As hWnd, hWndControl As hWnd, wNotifyCode As Long, wID As Long) Select Case wID '命令ID,设计菜单和工具栏的设置的值。 Case 10001 ‘和 MyDrawWin1.nButID 设置的相同 Case 10002 End Select End Sub 假如你窗口上设置了窗口菜单,运行后,菜单也会在窗口外框上面
2026年-1月-21日
251 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_mCtrlTreeList 目录树列表
一个目录树和列表组合控件,如同:TreeView和ListView 这两个控件合并在一起的效果。 使用方法 也是TreeView和ListView控件的组合方式 添加“列” mCtrlTreeList1.AddColumn("列0", 100) mCtrlTreeList1.AddColumn("列1", 100) mCtrlTreeList1.AddColumn("列2", 100) 添加“行”数据 Dim aa As MC_HTREELISTITEM = mCtrlTreeList1.AddItem(MC_TLI_ROOT, "列0数据") mCtrlTreeList1.SetItemText(aa, 1, "列1数据") mCtrlTreeList1.SetItemText(aa, 2, "列2数据") 假如添加子项目 Dim bb As MC_HTREELISTITEM = mCtrlTreeList1.AddItem(aa, "列0数据") 其它功能 功能同 TreeView和ListView 一样类似,可以参考它们,这里不再相信阐述。 图标显示 没一个行头都可以显示一个图标,使用方法和TreeView一样。 先添加一个图像列表控件,然后选择绑定。添加图像 在添加行数据时,设置图像索引 mCtrlTreeList1.AddItem(MC_TLI_ROOT, "列0数据",用户自定义数据,图像索引)
2026年-1月-21日
227 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_mCtrlHtml IE浏览器
这是对IE浏览器简单封装,主要用来显示一些简单的 HTIM 页面。 显示页面 网页 mCtrlHtml1.GotoUrl("http://www.baidu.com") 本地文件 mCtrlHtml1.GotoUrl("file:///c:/文件.html") 执行页面中的JS函数 mCtrlHtml1.CallScriptFunc(JS函数名,参数1,参数2,.... 可以没参数,也可以最多4个参数,传给JS函数 修改网页中的代码 没有提供任何方法可以设置全部网页,只能根据ID设置部分 Dim bb As String bb = "<html>" & vbCrLf & _ " <head>" & vbCrLf & _ " <title>网页标题 </title>" & vbCrLf & _ " <body id='zzz'>" & vbCrLf & _ " 这是一个网页" & vbCrLf & _ " </body>" & vbCrLf & _ "</html>" SaveFileStr App.Path & "1.htm", bb mCtrlHtml1.GotoUrl "file:///" & App.Path & "1.htm" mCtrlHtml1.SetTagContents "zzz","<a href='#2'>设置代码</a>" 全内存网页代码设置方法 上面代码需要通过文件操作,有点不方便,下面是全内存操作 设置空白网页 mCtrlHtml1.GotoUrl ("about:<body id=""myContent""></body>") 会在IE控件内产生网页源码: <HTML><body id="myContent"></body></HTML> 设置网页内容 mCtrlHtml1.SetTagContents("myContent", "<br><center><font size=""9"">勇芳软件工作室<br></font><br><a href=""soft.htm"">点击打开本地文件例题</a>" _ "<br><br><a href=""http://vfbdev.yfvb.com"">点击打开网址例题</a>" _ "<br><br><a href=""http://vfbdev.yfvb.com"" target=""_blank"">点击弹出新窗口例题</a></center>") 这样就是网页<body id=""myContent"">插入网页代码</body> 中间插入任意网页代码。 事件:MC_HN_BeforeNavigate 打开新URL Function Form1_mCtrlHtml1_MC_HN_BeforeNavigate(hWndForm As hWnd, hWndControl As hWnd, Url As Const WString)As Boolean Dim nurl As String =Url Print "新URL",nurl Function = False '返回 False 可以打开这个URL, 返回 True 就不允许打开这个网址 End Function 当你点击链接,可以在这个事件中决定是否打开这个URL,实现网页交互,就是网页是前端,VFB写后端代码的重要事件。 你可以在此设置新的网页内容,然后返回 True ,实现全内存交互。 事件:MC_HN_NewWindow 弹出新窗口 当链接中有 _blank 点击后会弹出新IE窗口 <a href=""http://vfbdev.yfvb.com"" target=""_blank"">点击弹出新窗口例题</a> 你可以在此事件中阻止弹窗,或写入新网页内容,实现 VFB 后端处理效果。 Function Form1_mCtrlHtml1_MC_HN_NewWindow(hWndForm As hWnd, hWndControl As hWnd,Url As Const WString)As Boolean Dim nurl As String =Url Print "新窗口",nurl Function = True '返回 False 禁用弹出新窗口 返回 True 允许弹窗 End Function
2026年-1月-21日
271 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_mCtrlGrid 表格
类似办公软件的表格功能,只是简化很多。支持虚表。 使用方法 先创建表格大小(例:创建5列10行的表,不包括列名和行名,会自动增加) mCtrlGrid1.ReSize(5,10) 给表格单元设置数据 mCtrlGrid1.SetCell(0,0,"1,1") mCtrlGrid1.SetCell(1,1,"2,2") 注意,左上角第一个是 0,0 , 参数是:列,行 获取表格单元数据 获取的文字= mCtrlGrid1.GetCellText(0,1) 单元格修改更新 当用户在单元格修改数据后,需要在“结束标签编辑”事件里,设置单元格 Function Form1_mCtrlGrid1_MC_GN_EndLabelEditW(hWndForm As hWnd, hWndControl As hWnd, NMG As MC_NMGDISPINFOW)As Long mCtrlGrid1.SetCell(NMG.wColumn,NMG.wRow,*NMG.cell.pszText) Function = FALSE ' 返回 TRUE 禁止编辑 End Function 修改列标题和行标题 标题必须在设计属性里设置,运行时,不可以改变。 当列标题设计属性设置为“自定义标题”,才可以自己设置列标题 mCtrlGrid1.SetCell(0,MC_TABLE_HEADER,"列表名1") mCtrlGrid1.SetCell(1,MC_TABLE_HEADER,"列表名2") mCtrlGrid1.SetCell(2,MC_TABLE_HEADER,"列表名2") 当行标题设计属性设置为“自定义标题”,才可以自己设置行标题 mCtrlGrid1.SetCell(MC_TABLE_HEADER,0,"行表名1") mCtrlGrid1.SetCell(MC_TABLE_HEADER,1,"行表名2") mCtrlGrid1.SetCell(MC_TABLE_HEADER,2,"行表名2") 常用功能 mCtrlGrid1.TableClear(0) '清除全部表格中的文字 mCtrlGrid1.GetColumnCount '获取表格的列数。 mCtrlGrid1.GetRowCount '获取表格的行数。 mCtrlGrid1.GetFocusedCell '获取单元格焦点 mCtrlGrid1.GetSelection '获取选择。 mCtrlGrid1.SetFocusedCell '设置单元格焦点 mCtrlGrid1.SetFocusedCell '设置单元格焦点 虚表模式 假如表格的数量很大时,设置单元格将会消耗很大的时间,因此可以直接用一个二维数组,不用设置单元格,速度就是你写代码处理二维数组的速度了。 首先,在设计属性里,必须勾选虚表模式 每次需要显示内容时,会触发事件“检索单元格数据”,然后你设置相关的数据即可 Sub Form1_mCtrlGrid1_MC_GN_GetDispInfoW(hWndForm As hWnd, hWndControl As hWnd, NMG As MC_NMGDISPINFOW) ' NMG.wColumn As WORD 列 ' NMG.wRow As WORD 行 ' NMG.cell.pszText As WString Ptr 单元格文本 ' NMG.cell.cchTextMax As Integer 文本字符数 ' NMG.cell.lParam As LPARAM 用户数据 ' NMG.cell.dwFlags As DWORD 单元格标志 (对齐标记) End Sub
2026年-1月-21日
332 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_mCtrlButton 按钮
mCtrl 出品的增强按钮,它多了一个下拉按钮和可以设置图标 常用事件 点击按钮 Sub Form1_mCtrlButton1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) End Sub 点击下拉 Sub Form1_mCtrlButton1_BCN_DropDown(hWndForm As hWnd, hWndControl As hWnd, NMB As MC_NMBCDROPDOWN) End Sub 常用属性 mCtrlButton1.Caption 设置或返回标题 mCtrlButton1.Enabled 设置或返回是后禁用 mCtrl系列有些控件存在问题,已经剔除,等以后看看能否解决。 mCtrlChart 图表显示控件 mCtrlExpand 折叠控件 mCtrlImgView 图像显示 mCtrlMDItab 标签
2026年-1月-21日
279 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_Scintilla 火花代码编辑器
Scintilla是一个免费、跨平台、支持语法高亮的编辑控件。它完整支持源代码的编辑和调试,包括语法高亮、错误指示、代码完成(code completion)和调用提示(call tips)。能包含标记(marker)的页边(margin)可用于标记断点、折叠和高亮当前行。 VFB 里的代码编辑,就是使用这个控件。功能非常多,非常强大。 编译成软件后,会在软件文件夹产生一个 支持库DLL,发行软件需要带这个DLL。 主要事件 文本或样式已更改 Sub Form1_Scintilla1_SCN_Updateui(hWndForm As hWnd, hWndControl As hWnd, sN As SCNOTIFICATION ) End Sub 主要属性 Scintilla1.GetLineCount 总行数 Scintilla1.Text 获取或设置文本,UTF8编码 Scintilla1.SendMessage 发送消息 Scintilla 设置非常多,都是通过 Scintilla1.SendMessage 来处理,具体设置需要到官网查看编程文档。这里控件已经给你处理好了事件和消息。后面就按编程文档说明,发送消息即可。 点此打开火花编辑器官方网址 常用设置参考 SciMsg 函数是Scintilla 内部定义的函数和 Scintilla1.SendMessage 是一样的功能,可以按照自己喜欢的方式写。 Dim pSci As Any Ptr = Scintilla1.pSci SciMsg(pSci, SCI_STYLESETFORE, STYLE_DEFAULT, 窗体文字) SciMsg(pSci, SCI_STYLESETBACK, STYLE_DEFAULT, 窗体底色) Dim tStr As ZString * 1024 = "Microsoft YaHei Mono" SciMsg(pSci, SCI_STYLESETFONT, STYLE_DEFAULT, Cast(lParam, @tStr)) SciMsg(pSci, SCI_STYLESETSIZE, STYLE_DEFAULT, 10) SciMsg(pSci, SCI_STYLESETCHARACTERSET, STYLE_DEFAULT, SC_CHARSET_DEFAULT) SciMsg(pSci, SCI_STYLECLEARALL, 0, 0) ' 将全局样式复制到所有其他样式 '行号宽度 tStr = "_9" Dim nPixels As Long = SciMsg(pSci, SCI_TEXTWIDTH, 0, Cast(lParam, @tStr)) SciMsg(pSci, SCI_SETMARGINWIDTHN, 0, nPixels) ' 书签 SciMsg(pSci, SCI_SETMARGINWIDTHN, 1, 2) '行号颜色 SciMsg(pSci, SCI_SETMARGINTYPEN, 0, SC_MARGIN_NUMBER) SciMsg(pSci, SCI_STYLESETFORE, STYLE_LINENUMBER, 窗体文字) SciMsg(pSci, SCI_STYLESETBACK, STYLE_LINENUMBER, 窗体亮度15) '' TABS 作为空格处理 SciMsg(pSci, SCI_SETUSETABS, CTRUE, 0) '' TAB 宽度 SciMsg(pSci, SCI_SETTABWIDTH, 3, 0) SciMsg(pSci, SCI_SETINDENT, 3, 0) ' 显示缩进参考线 SciMsg(pSci, SCI_SETINDENTATIONGUIDES, CTRUE, 0) '' 当前行颜色 SciMsg(pSci, SCI_SETCARETLINEBACK, 窗体亮度10, 0) SciMsg(pSci, SCI_SETHOTSPOTACTIVEUNDERLINE, CTRUE, 0) '允许 ''' 选择颜色 'SciMsg(pSci, SCI_SETSELFORE, CTRUE, op.Themes(0).colors(CLR_SELECTION).nFg) 'SciMsg(pSci, SCI_SETSELBACK, CTRUE, op.Themes(0).colors(CLR_SELECTION).nBg) 'SciMsg(pSci, SCI_SETHOTSPOTACTIVEUNDERLINE, CTRUE, 0) '允许 '' 始终保持插入符号行可见 SciMsg(pSci, SCI_SETCARETLINEVISIBLEALWAYS, CTRUE, 0) '' 标识要在单词中使用的字符 tStr = "&~_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" SciMsg(pSci, SCI_SETWORDCHARS, 0, Cast(lParam, @tStr)) '为了在编辑器中显示,utf8或utf16将被转换为utf8。 SciMsg(pSci, SCI_SETCODEPAGE, SC_CP_UTF8, 0) 'SciMsg(pSci, SCI_SETSCROLLWIDTHTRACKING, True, 0) '滚动宽度跟踪,则调整滚动宽度以确保当前显示的所有行都可以完全滚动。 SciMsg(pSci, SCI_SETSCROLLWIDTH, 10000, 10000) SciMsg(pSci, SCI_SETVSCROLLBAR, 0, 0) SciMsg(pSci, SCI_SETHSCROLLBAR, 0, 0) SciMsg(pSci, SCI_SETLEXER, SCLEX_VB, 0) '设置FreeBASIC关键字 If Len(FreeBASIC关键字)=0 Then FreeBASIC关键字 = "abs abstract access acos add alias allocate alpha and and and andalso any append as asc asin asm assert assertwarn atan2 atn bload bsave base bin " FreeBASIC关键字 &= "binary bit bitreset bitset byref byval byref byte callocate cbyte cdbl cint clng clngint cptr cshort csign csng cubyte cuint culng culngint cushort " FreeBASIC关键字 &= "cunsg cvd cvi cvl cvlongint cvs cvshort call case cast chdir chain chartoutf chr circle class clear close cls color command common condbroadcast " FreeBASIC关键字 &= "condcreate conddestroy condsignal condwait const const const constructor constructor continue cos csrlin curdir custom data date dateadd datediff " FreeBASIC关键字 &= "datepart dateserial datevalue day deallocate declare defbyte defdbl defint deflng defshort defsng defstr defubyte defuint defushort deflongint defulongint " FreeBASIC关键字 &= "delete destructor destructor dim dir do double draw draw dylibfree dylibload dylibsymbol eof else elseif encoding end end end if endif enum...end " FreeBASIC关键字 &= "environ eqv eqv erase erfn erl ermn error event exepath exec exit exp export extends extern field fileattr filecopy filedatetime fileexists filelen " FreeBASIC关键字 &= "fix flip for for format frac fre freefile function function get getjoystick getkey getmouse gosub goto hex hibyte hiword hour iif if imageconvertrow " FreeBASIC关键字 &= "imagecreate imagedestroy imp imp implements import instr instrrev inkey inp input int integer is isdate isredirected kill lbound lcase loc lof lprint " FreeBASIC关键字 &= "lset ltrim left len let let lib line lobyte loword locate lock log long longint loop lpos mkd mki mkl mklongint mks mkshort mid mid minute mkdir " FreeBASIC关键字 &= "mod mod month monthname multikey mutexcreate mutexdestroy mutexlock mutexunlock naked name namespace new next next not now object oct offsetof on " FreeBASIC关键字 &= "once open operator option or orelse out output overload override pcopy pmap preset pset pset paint palette peek placement point pointcoord pointer " FreeBASIC关键字 &= "poke pos preserve print print print private private: procptr property protected: ptr public put put rgb rgba rset rtrim random randomize redim read " FreeBASIC关键字 &= "reallocate rem reset restore resume return right rmdir rnd run sadd scope screen screencontrol screencopy screenevent screenglproc screeninfo screenlist " FreeBASIC关键字 &= "screenlock screenptr screenres screenset screensync screenunlock second seek seek select setdate setenviron setmouse settime sgn shared shell shl " FreeBASIC关键字 &= "shl short shr shr sin single sizeof sleep space spc sqr static static step step stick stop str strptr strig string sub sub swap system tab tan then " FreeBASIC关键字 &= "this threadcreate threadwait threadcall threaddetach time timeserial timevalue timer to trans trim type typeof ubound ubyte ucase uinteger ulong " FreeBASIC关键字 &= "ulongint ushort union unlock unsigned until using val valint vallng valuint valulng var varptr view virtual wbin wchr whex woct wspace wstr wstring " FreeBASIC关键字 &= "wait weekday weekdayname wend while width window windowtitle winput with write wstring xor year zstring cdecl defined pascal stdcall va_arg va_first " FreeBASIC关键字 &= "va_next " End If 'If Len(op.FBKeywordsC) Then SciMsg(pSci, SCI_SETKEYWORDS, 0, Cast(lParam, StrPtr(FreeBASIC关键字))) 'End If 'If Len(op.APIKeywordsC) Then ' SciMsg(pSci, SCI_SETKEYWORDS, 1, Cast(lParam, StrPtr(op.APIKeywordsC))) 'End If '设置多行注释样式 SciMsg(pSci, SCI_STYLESETFORE, SCE_B_MULTILINECOMMENT, BGR(77, 153, 0)) 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_MULTILINECOMMENT, op.Themes(0).colors(CLR_COMMENTS).nBg) '设置注释样式 SciMsg(pSci, SCI_STYLESETFORE, SCE_B_COMMENT, BGR(77, 153, 0)) 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_COMMENT, op.Themes(0).colors(CLR_COMMENTS).nBg) '设置关键字样式 SciMsg(pSci, SCI_STYLESETFORE, SCE_B_KEYWORD, BGR(0, 0, 229)) 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_KEYWORD, op.Themes(0).colors(CLR_KEYWORD).nBg) '设置标识符样式 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_IDENTIFIER, op.Themes(0).colors(CLR_TEXT).nBg) '设置数字样式 SciMsg(pSci, SCI_STYLESETFORE, SCE_B_NUMBER, BGR(0, 178, 178)) 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_NUMBER, op.Themes(0).colors(CLR_TEXT).nBg) '设置运算符样式 SciMsg(pSci, SCI_STYLESETFORE, SCE_B_OPERATOR, BGR(178, 0, 178)) 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_OPERATOR, op.Themes(0).colors(CLR_OPERATORS).nBg) '设置预处理样式 SciMsg(pSci, SCI_STYLESETFORE, SCE_B_PREPROCESSOR, BGR(102, 0, 204)) 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_PREPROCESSOR, op.Themes(0).colors(CLR_PREPROCESSOR).nBg) '设置字符串样式 SciMsg(pSci, SCI_STYLESETFORE, SCE_B_STRING, BGR(178, 0, 89)) 'SciMsg(pSci, SCI_STYLESETBACK, SCE_B_STRING, op.Themes(0).colors(CLR_STRINGS).nBg)
2026年-1月-21日
306 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_MySqlBox 网络大型数据库
MySQL 是一种流行的开源关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)来管理或操作数据库。MySQL 由瑞典公司 MySQL AB 开发,并在 2008 年被 Sun Microsystems 收购,随后 Sun Microsystems 又被 Oracle Corporation 收购。尽管 MySQL 的所有权发生了变化,但它仍然保持其开源和免费的特性,是许多网站和应用程序背后的首选数据库系统。 MySQL 的特点 开源和免费:MySQL 是开源的,这意味着其源代码是公开的,任何人都可以查看、修改和分发它。此外,对于大多数用途,MySQL 是免费的,降低了开发成本。 高性能:MySQL 经过了优化,以提供快速的数据访问速度,支持高并发访问,适用于大型和复杂的数据库应用。 可靠性:MySQL 提供了多种机制来确保数据的完整性和可靠性,包括事务处理、行级锁定和外键约束等。 灵活性:MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等,每种引擎都有其特定的用途和性能特点,用户可以根据需要选择合适的存储引擎。 安全性:MySQL 提供了强大的安全特性,如用户认证、访问控制、数据加密等,以保护数据免受未授权访问。 易于使用:MySQL 提供了简单的 SQL 语言接口,使得数据库的管理和操作变得容易。此外,它还提供了丰富的文档和社区支持,帮助用户解决问题。 跨平台:MySQL 可以在多种操作系统上运行,包括 Windows、Linux、macOS 等,提供了良好的跨平台兼容性。 MySQL 的应用 MySQL 被广泛应用于各种类型的应用程序中,包括网站、博客、电子商务网站、内容管理系统(CMS)、企业资源规划(ERP)系统、客户关系管理(CRM)系统等。由于其开源和免费的特性,MySQL 特别受到小型企业和个人开发者的青睐。 外带一个DLL文件 数据库分为服务器版和客户机版,本控件属于客户机版。使用前,你必须安装一个服务器版软件,部署一个 mysql 数据库(网上到处都有,这里不再说明),或者你已经在网上购买的了一个网络数据库 本控件只带一个DLL文件,编译软件后,在软件文件夹下有一个 mysql 的DLL,你发布软件需要带着这个DLL,可以可以随时更新到最新版DLL 打开mysql 数据库 当你创建了一个MySql数据库,就拥有了账号密码、IP或域名等,填入相关参数即可 MySql默认端口是3306,由于是网络数据库,为了安全(主要是为了那些扫端口爆破软件)可以修改端口,只有你自己知道的端口。 if MySqlBox1.Open(服务器IP或域名,用户名,密码,数据库名,端口) =0 Then Print "打开失败" 使用完成后,需要关闭数据库 MySqlBox1.Close 查询数据库 注意1:查询代码分W字符版和UTF8字符版,可以根据自己的需要使用,例题说明不提及UTF8字符版 注意2:返回的字符文字全部是 UTF8字符格式,使用时需要转换字符编码 查询相关参数说明 Table 表名 如果特殊字符,比方包含空隔、关键词、中文等,可以用反引号 ` 包裹字段名 不然会报错 MySqlBox1.Find("表名".....普通表名 MySqlBox1.Find("`表名`".....特殊表名 MySqlBox1.Find("表名1,表名1".....多表联合查询 Cond 条件 如ID>0 等等,就是字段名>、= 、<、<= 、>= 某值 还有 or and 等,和我们代码的 if 同样道理,无条件将查出全部 还有 id IN(2,10,30) 等列表条件,可以查阅相关的 SQL 条件说明 LIKE '%AA%' 模糊查找,%号表示任意字符,模糊条件不区分大小写。 字符串用单引号( ' ),如同 B语法的双引号,遇到值是单引号( ' ) ,那么和 B语法一样,用连续2个单引号 ( '' ) 表示1个单引号的值。 MySqlBox1.Find("表名","id>3".... 普通数值查询 MySqlBox1.Find("表名", "(id>3 And id<10) Or id=10 "....表达式查询,网上搜索SQL命令 ,和 Basic的条件语法很相似 MySqlBox1.Find("表名","`字段名`='文本'".... 字符查询 MySqlBox1.Find("表名"," `字段名` LIKE '%文本%'".... 字符模糊查询,%号表示任意字符,模糊条件不区分大小写 MySqlBox1.Find("表名", " id IN(2,10,30) "....多值查询,等通于:id = 2 Or id = 10 Or id = 30 rs() 返回查出的内容 1:查询多行时是2维数组,rs(行,列) 0行为字段名称:如 rs(0,0 rs(0,1) 数据从 rs(1,x) 开始 2:查询单行时是1维数组 rs(列) 3:变量类型是 String ,不表示是 A字符,是原始数据,如果字段是字符,需要转换后使用。 如果字段是数字,用 val() valint() 转换,如果是字符,用 Utf8toStr UTF8toCWSTR 转换 Col 字段名称(列名) 需要查询出什么字段,可以用 字段名1,字段名2,... 查出结果为指定列,将影响 rs() 结果 MySqlBox1.Find(表名, 条件, rs(), "*"....全部字段 MySqlBox1.Find(表名, 条件, rs(), "字段名1,字段名2,字段名2"....部分字段,为了节约查询时间,提供查询速度 Orderby 查出的数据按那个字段排序 这里是 字段名称(列名) 默认升序,倒序:字段名 DESC ,字段名称+空格+DESC ,默认值是ASC 可以多字段排序:字段名1,字段名2,字段名3 等等,也可以加 DESC 倒序,先排序 字段1,字段1里的内容字段2排序...... MySqlBox1.Find(表名, 条件, rs(), "*", "字段名1"....查出结果按[字段名1]从小到大排序 MySqlBox1.Find(表名, 条件, rs(), "*", "字段名1 DESC"....查出结果按[字段名1]从大到小排序 MySqlBox1.Find(表名, 条件, rs(), "*", "字段名1,字段名2,字段名3"....先按[字段名1]排序,字段1相同的按[字段名2]排序,以此类推。 * Page 分页查询 第 Page 页(最小是 1页),每页 Pagesize 行。不设置 Pagesize ,将查出全部内容。 * Pagesize 1页多少条数据 MySqlBox1.Find(表名, 条件, rs(), 字段, 排序, 1,100) 查询第1页,每页100行 查询的行数太多,建议用分页查询,来保障软件执行效率。 ### 查询多行数据 Dim rs() as String Dim as Long x,y If MySqlBox1.Find("表名","条件", rs()) Then Print “行数=” &UBound(rs) & “,列数=” & UBound(rs, 2) For y = 0 To UBound(rs) ' y = 0 时将显示字段名 dim bb as String For x = 0 To UBound(rs, 2) bb &=rs(y, x) & " , " ; '如果是文本,因为是 UTF8 编码,需要转换后输出 Next Print bb Next Else Print "出错:" End If ### 查询单行数据 有时候,只需要一行数据,返回全部字段 Dim rs() as String Dim as Long x,y If MySqlBox1.FindOne("表名","条件", rs()) Then dim bb as String For x = 0 To UBound(rs) bb &= rs(x) & " , " ; Next Else Print "出错:" End If ### 查询单字段数据 查询出一行当中的一个字段,假如查询出多个字段,就返回第一个字段,当返回空时,表示查询失败。 uid = ValInt(Form1.MySqlBox1.FindOnly("User" ,"uName='" & 账号 & "'" ,"uID")) ### 统计行数 和查询一样,这只是返回行数,条件参数查看查询里的说明。 行数=MySqlBox1.Count(表名,条件) ### 新增记录(一行) 返回=MySqlBox1.AddItem(表名, 字段赋值列表) **字段赋值列表** 有字段名和值组成,用英文逗号隔开 返回=MySqlBox1.AddItem(表名, "字段名1=值1,字段名2=值2,字段名3=值3,字段名4=值4") **如果字段名是特殊字符**,比如SQL命令里的关键词、非法字符等,用双引用或中括号 ”字段名“ 或 [字段名] **如果”值“是字符串**,用单引用包裹,如:'文字内容' ,假如文字是单引用,那么用 2个单引号代表1个单引号 **如果数据库表中字段没在赋值列表中**,那么就按数据库表的默认值自动赋值。也就是说,字段有 10个,你只给1个字段赋值,那么其它的就按默认赋值。 **返回:** 当有自增主键(通常是 ID字段)就返回当前新增的ID,当无这样的字段,返回可能是0。当新增失败,返回0. ### 删除记录(多行) 返回行数= MySqlBox1.DeleteItem(表名, 条件) **条件**:参考查询里的条件说明,就是查询出的所有行,被删除 **返回**:假如失败,返回 -1,成功返回 删除了多少行。 ### 更新记录(修改记录) * 普通更新 返回= MySqlBox1.Update(表名, 条件,更新列表) **表名:** 参考查询 **条件:** 参考查询 **更新列表:** 参考新增中的 **字段赋值列表** **返回:** 假如失败,返回 -1,成功返回 更新了多少行。 ### 十二、直接执行SQL MySqlBox1.SqlFind (sql命令,返回()) MySqlBox1.SqlFindOne(sql命令,返回()) 假如命令中有返回,比如查询,就有返回内容,假如命令中无返回,比如更新,这个返回就无效。 **注意:** SQL命令是 UTF8 编码的字符,返回的也是UTF8 ### 其它更多功能 除了以上基本功能,本控件还封装了好多实用功能,需要自己来测试研究,这里就不再把所有的功能都介绍一遍,因为都带有简单是中文说明,很容易明白
2026年-1月-21日
593 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_SQLiteBox 本地小型数据库
SQLite3数据库是一个轻量级的嵌入式数据库引擎,广泛应用于各种应用程序中,包括移动设备、桌面应用程序和嵌入式系统。以下是SQLite3数据库的详细说明: 一、概述 轻量级与高效:SQLite3以其轻量级和高效的特点著称,它占用的资源少,消耗总量小,适合在资源受限的环境中使用。 嵌入式数据库:SQLite3可以直接嵌入到应用程序中,无需独立的数据库服务器。这种无服务器的架构简化了部署和管理,减少了与服务器通信的开销。 零配置:使用SQLite3不需要复杂的配置过程,只需在应用程序中包含SQLite3的库文件即可开始使用。 跨平台支持:SQLite3是一个跨平台的数据库引擎,可以在多种操作系统上运行,包括Windows、Linux、macOS、Android等。 二、特性 自包含性:SQLite3数据库是自包含的,它将所有的数据和数据库管理功能封装在一个文件中。这意味着你可以将整个数据库文件复制到其他地方,或者将它嵌入到另一个应用程序中,而不需要额外的配置或安装步骤。 数据类型支持:SQLite3支持多种数据类型,包括NULL、INTEGER、REAL、TEXT、BLOB和NUMERIC等,以满足不同类型数据的存储需求。同时,它也是一个动态类型的数据库引擎,允许在同一列中存储不同类型的值。 事务支持:SQLite3支持事务处理,允许从多个进程或线程安全地访问数据库。 ACID兼容性:SQLite3的事务是完全兼容ACID(原子性、一致性、隔离性、持久性)的,确保了数据的一致性和可靠性。 简单易用:SQLite3使用简单的SQL语言进行数据操作,不需要独立的管理工具或复杂的设置过程。 三、应用场景 移动应用:SQLite3是许多移动操作系统的默认数据库,适用于iOS和Android应用程序的本地存储。 桌面应用:许多桌面应用程序,如文本编辑器、图像编辑软件等,使用SQLite作为其本地数据库,简化数据管理。 嵌入式系统:由于其小巧的特性,SQLite3非常适合嵌入式设备,如家庭自动化系统、智能家居设备和汽车娱乐系统。 开发与测试:SQLite3在开发和测试环境中也非常流行,方便开发者在不需要复杂数据库服务器的情况下进行数据测试和调试。 四、内置或外带DLL 内置的话会让 EXE 增加 1.5MB左右文件大小,外带 DLL,就是 需要带一个 sqlite3.dll 文件 默认是外带DLL,要想内置,你需要自己操作: 控件: 打开文件夹:VisualFreeBasic6\Control\SQLite3\lib 1,把32和64的文件夹删除,2,把里面的静态库文件,复制到“lib” 里面, 库: 打开文件夹:VisualFreeBasic6\Libs\public\database\SQLite3\lib 1,把32和64的文件夹删除,2,把里面的静态库文件,复制到“lib” 里面, 本数据库,有“控件”和“库”使用,自己觉得那个方便,就用那个,但不可以同时使用,有了“控件”,就无法使用“库”编译会报重复的。 五、打开一个数据库文件 控件 在窗口放置一个控件,控件其实就是一个全局变量,不用自己声明全局变量,其它和库没分别,看大家习惯。 If SQLiteBox1.Open("c:\数据库文件.dp") =0 Then Print "打开失败" 使用完成后,需要关闭数据库,因为控件是全局的,不关闭影响全局。 SQLiteBox1.Close 库 需要自己声明变量,可以是局部,可以是全局。 dim dp as SQLiteDB If dp.Open("c:\数据库文件.dp") =0 Then Print "打开失败" 使用完成后,局部变量,变量销毁会自动关闭,全局变量需要关闭 dp.Close 打开有密码的数据库 控件 If SQLiteBox1.Open("c:\数据库文件.dp","密码") =0 Then Print "打开失败" 库 If dp.Open("c:\数据库文件.dp","密码") =0 Then Print "打开失败" 控件和库操作一样,后面就不重复举例 六、查询数据库 注意1:查询代码分W字符版和UTF8字符版,可以根据自己的需要使用,例题说明不提及UTF8字符版 注意2:返回的字符文字全部是 UTF8字符格式,使用时需要转换字符编码 查询相关参数说明 Table 表名 如果特殊字符,比方包含空格、关键词、中文等,可以添加双引号 "表名" 或 [表名] 不然会报错 SQLiteBox1.Find("表名".....普通表名 SQLiteBox1.Find("""表名""".....特殊表名 SQLiteBox1.Find("[表名]".....特殊表名 SQLiteBox1.Find("表名1,表名1".....多表联合查询 Cond 条件 如ID>0 等等,就是字段名>、= 、<、<= 、>= 某值 还有 or and 等,和我们代码的 if 同样道理,无条件将查出全部 还有 id IN(2,10,30) 等列表条件,可以查阅相关的 SQL 条件说明 LIKE '%AA%' 模糊查找,%号表示任意字符,模糊条件不区分大小写。 字符串用单引号( ' ),如同 B语法的双引号,遇到值是单引号( ' ) ,那么和 B语法一样,用连续2个单引号 ( '' ) 表示1个单引号的值。 SQLiteBox1.Find("表名","id>3".... 普通数值查询 SQLiteBox1.Find("表名", "(id>3 And id<10) Or id=10 "....表达式查询,网上搜索SQL命令 ,和 Basic的条件语法很相似 SQLiteBox1.Find("表名","[字段名]='文本'".... 字符查询 SQLiteBox1.Find("表名"," [字段名] LIKE '%文本%'".... 字符模糊查询,%号表示任意字符,模糊条件不区分大小写 SQLiteBox1.Find("表名", " id IN(2,10,30) "....多值查询,等通于:id = 2 Or id = 10 Or id = 30 rs() 返回查出的内容 1:查询多行时是2维数组,rs(行,列) 0行为字段名称:如 rs(0,0 rs(0,1) 数据从 rs(1,x) 开始 2:查询单行时是1维数组 rs(列) 3:变量类型是 String ,不表示是 A字符,是原始数据,如果字段是字符,需要转换后使用。 如果字段是数字,用 val() valint() 转换,如果是字符,用 Utf8toStr 或Utf8toStringW 转换 Col 字段名称(列名) 需要查询出什么字段,可以用 字段名1,字段名2,... 查出结果为指定列,将影响 rs() 结果 SQLiteBox1.Find(表名, 条件, rs(), "*"....全部字段 SQLiteBox1.Find(表名, 条件, rs(), "字段名1,字段名2,字段名2"....部分字段,为了节约查询时间,提供查询速度 Orderby 查出的数据按那个字段排序 这里是 字段名称(列名) 默认升序,倒序:字段名 DESC ,字段名称+空格+DESC ,默认值是ASC 可以多字段排序:字段名1,字段名2,字段名3 等等,也可以加 DESC 倒序,先排序 字段1,字段1里的内容字段2排序...... SQLiteBox1.Find(表名, 条件, rs(), "*", "字段名1"....查出结果按[字段名1]从小到大排序 SQLiteBox1.Find(表名, 条件, rs(), "*", "字段名1 DESC"....查出结果按[字段名1]从大到小排序 SQLiteBox1.Find(表名, 条件, rs(), "*", "字段名1,字段名2,字段名3"....先按[字段名1]排序,字段1相同的按[字段名2]排序,以此类推。 Page 分页查询 第 Page 页(最小是 1页),每页 Pagesize 行。不设置 Pagesize ,将查出全部内容。 Pagesize 1页多少条数据 SQLiteBox1.Find(表名, 条件, rs(), 字段, 排序, 1,100) 查询第1页,每页100行 查询的行数太多,建议用分页查询,来保障软件执行效率。 六-1、查询多行数据 Dim rs() as String Dim as Long x,y If SQLiteBox1.Find("表名","条件", rs()) Then Print “行数=” &UBound(rs) & “,列数=” & UBound(rs, 2) For y = 0 To UBound(rs) ' y = 0 时将显示字段名 dim bb as String For x = 0 To UBound(rs, 2) bb &=rs(y, x) & " , " ; '如果是文本,因为是 UTF8 编码,需要转换后输出 Next Print bb Next Else Print "出错:" End If 六-2、查询单行数据 有时候,只需要一行数据,返回全部字段 Dim rs() as String Dim as Long x,y If SQLiteBox1.FindOne("表名","条件", rs()) Then dim bb as String For x = 0 To UBound(rs) bb &= rs(x) & " , " ; Next Else Print "出错:" End If 六-3、查询单字段数据 查询出一行当中的一个字段,假如查询出多个字段,就返回第一个字段,当返回空时,表示查询失败。 uid = ValInt(Form1.SQLiteBox1.FindOnly("User" ,"uName='" & 账号 & "'" ,"uID")) 六-4、查询带二进制字段的数据 当字段中,有一个二进制字段,就需要使用二进制查询来查,不然无法返回二进制内容 SQLiteBox1.FindByte 查询多行 SQLiteBox1.FindOneByte 查询单行 SQLiteBox1.FindOnlyByte 查询单字段 使用方法参考 六-1 -2 -3 ,方法一样。方法内容也是一样。只是把二进制字段保存在 Str字符串中。 七、统计行数 和查询一样,这只是返回行数,条件参数查看查询里的说明。 行数=SQLiteBox1.Count(表名,条件) 八、新增记录(一行) 返回=SQLiteBox1.AddItem(表名, 字段赋值列表) 字段赋值列表 有字段名和值组成,用英文逗号隔开 返回=SQLiteBox1.AddItem(表名, "字段名1=值1,字段名2=值2,字段名3=值3,字段名4=值4") 如果字段名是特殊字符,比如SQL命令里的关键词、非法字符等,用双引用或中括号 ”字段名“ 或 [字段名] 如果”值“是字符串,用单引用包裹,如:'文字内容' ,假如文字是单引用,那么用 2个单引号代表1个单引号 如果数据库表中字段没在赋值列表中,那么就按数据库表的默认值自动赋值。也就是说,字段有 10个,你只给1个字段赋值,那么其它的就按默认赋值。 返回: 当有自增主键(通常是 ID字段)就返回当前新增的ID,当无这样的字段,返回可能是0。当新增失败,返回0. 九、删除记录(多行) 返回行数= SQLiteBox1.DeleteItem(表名, 条件) 条件:参考查询里的条件说明,就是查询出的所有行,被删除 返回:假如失败,返回 -1,成功返回 删除了多少行。 十、更新记录(修改记录) 普通更新 返回= SQLiteBox1.Update(表名, 条件,更新列表) 表名: 参考查询 条件: 参考查询 更新列表: 参考新增中的 字段赋值列表 返回: 假如失败,返回 -1,成功返回 更新了多少行。 二进制数据更新 SQLiteBox1.UpdateByte(表名, 条件,字段名,数据指针,数据长度) 二进制数据一次只能更新一个,假如你有多个字段,就需要多次执行这个代码。 假如新增记录时,有二进制数据字段,那些,先新增,取的 ID字段值,然后再执行更新操作来写入数据。 十一、内存数据库 将数据库全部加载到内存中使用,加快数据库速度 SQLiteBox1.MemOpen(数据库文件,密码,同步) 允许同步后,关闭数据库后会自动更新到文件中,不同步的话,需要自己执行以下代码 SQLiteBox1.MemSave 当数据库文件为空,那么创建一个无文件的空的内存数据库 十二、事务(大量数据操作) 当你有大量的新增或更新操作,你会发现执行速度非常慢,为了解决这个问题,就有了事务操作,看操作的数量,速度可能要快几十倍,几百倍的速度。 SQLiteBox1.TransactionBegin() ........大量更新和新增操作 SQLiteBox1.TransactionEnd() 十三、直接执行SQL SQLiteBox1.SqlFind (sql命令,返回()) 假如命令中有返回,比如查询,就有返回内容,假如命令中无返回,比如更新,这个返回就无效。 注意: SQL命令是 UTF8 编码的字符,返回的也是UTF8 十四、流式查询数据库(只支持库,不支持控件) 用于大数据查询,不经过数组转换,不占用内存,高效率 上面普通的查询,一般查询几十条,上百条记录,要是遇到 几千,上万,几十万,那么普通查记录就效率低,占用内存大。那么就需要用到这个查询 相关成员 Declare Function StreamFind(表名 As Wstring, 条件 As Wstring, 字段名列表 As Wstring = "*", 排序方式 As Wstring = "", 第几页 As Long = 1, 每页行数 As Long = 0) As sqlite3_stmt Ptr '流式查询数据库 (大数据查询),成功返回stmt指针,失败返回0,stmt指针可以用来直接用 sqlite3的API写代码,会效率更高。 Declare Function StreamFindUtf(表名 As String, 条件 As String, 字段名列表 As String = "*", 排序方式 As String = "", 第几页 As Long = 1, 每页行数 As Long = 0) As sqlite3_stmt Ptr '流式查询数据库 (大数据查询),成功返回stmt指针,失败返回0,stmt指针可以用来直接用 sqlite3的API写代码,会效率更高。 Declare Function StreamColCount() As Long '字段列数 读取查询到字段的数量 Declare Function StreamColName(colIdx As Long) As String '字段名 读取colIdx字段的字段名,是UTF8编码(colIdx从0开始) Declare Function StreamColType(colIdx As Long) As Long '字段类型 读取colIdx字段的类型编号(colIdx从0开始)注意:必须在 StreamNext 执行后才可以获取 {=.SQLITE_INTEGER 整数.SQLITE_FLOAT 浮点数.SQLITE_TEXT 文本.SQLITE_BLOB 二进制.SQLITE_NULL 空值} Declare Function StreamNext() As Boolean '查询下一个 返回False没有记录了,用 While db.StreamNext() 来循环读取即可,注意:当返回False,会自动释放了 StreamFind 返回的 流指针,你获得的指针就无效了,不要再使用,否则可能发生崩溃 Declare Function StreamColIsNull(colIdx As Long) As Boolean '判断是否空值 如果这个字段为空,返回True (colIdx从0开始) Declare Function StreamColInt32(colIdx As Long) As Long '读取32位数值 读取colIdx字段的32位值(colIdx从0开始) Declare Function StreamColInt64(colIdx As Long) As LongInt '读取64位数值 读取colIdx字段的64位值(colIdx从0开始) Declare Function StreamColDouble(colIdx As Long) As Double '读取浮点数值 读取colIdx字段的浮点数(colIdx从0开始) Declare Function StreamColStr(colIdx As Long) As String '读取文本 读取colIdx字段的文本,是UTF8编码(colIdx从0开始) Declare Function StreamColBlob(colIdx As Long) As String '读取二进制数据 读取colIdx字段的二进制Blob数据,返回的字符串是二进制数据,不是文本字符串(colIdx从0开始) 具体使用例题 Dim dp As SQLiteDB dp.Open(App.Path & "蒸馏20步-30分.nyk") '打开数据文件 dp.TransactionBegin '启用事务操作(可以理解为开启大量数据读写操作,主要是写操作,不开启会非常慢) Print dp.CountUtf("bhobk") '打印数据库这个表有多少行数据 dp.StreamFindUtf("bhobk", "") '使用流查询 Dim by As String, i As Long, jj1 As Long,jj2 As Long , tt As ULong = GetTickCount While dp.StreamNext() '读取流查询 by = dp.StreamColBlob(2) '获取字段索引2的内容,索引从0开始 '以下是业务处理代码,只是例题 For i = 5 To Len(by) Step 4 If Mid(by, 1, 2) = Mid(by, i, 2) Then by = Left(by, i -1) dp.UpdateByteUtf("bhobk", "id=" & dp.StreamColInt32(0), "move", StrPtr(by), Len(by)) '更新数据 jj2+=1 Exit For End If Next jj1+=1 If GetTickCount - tt > 300 Then '每300毫秒输出,假如数据很多,要处理很久,需要定时输出,表示还在工作,不是死机 tt = GetTickCount Print jj1,jj2 End If Wend dp.TransactionEnd '结束事务 dp.Vacuum '整理数据库,去除未使用数据,减少数据库文件大小 Print "全部完成",jj1,jj2 使用 StreamFindUtf 查询,然后循环使用 StreamNext ,StreamCol** 读取各字段内容。 其它更多功能 除了以上基本功能,本控件还封装了好多实用功能,需要自己来测试研究,这里就不再把所有的功能都介绍一遍,因为都带有简单是中文说明,很容易明白 功能:创建表、新增字段、创建索引、读取\保存配置、求和,整理数据库 等等
2026年-1月-21日
912 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic控件_Miniblink 小型谷歌浏览器
一个标准谷歌浏览器,需要几百MB的附带文件,而这个只附带一个DLL,才 30MB 大小。 我们知道IE浏览器不支持现代浏览器特征,尤其很多CSS、JS 代码无法使用。而这个简化版可以支持大多数现代浏览器特征。唯一缺点,就是需要跟随一个 DLL文件,发行软件时,必须带上这个DLL才可以。 编译软件后,在EXE文件同文件夹下,会有一个相关DLL。 显示网页 设置网址 Miniblink1.URL ="http://www.yfvb.com" 本地网页 Miniblink1.LoadFile("X:\index.html") 直接设置网页代码 Dim bb As String bb = "<html>" & vbCrLf & _ " <head>" & vbCrLf & _ " <title>网页标题 </title>" & vbCrLf & _ " <body>" & vbCrLf & _ " 网页显示内容" & vbCrLf & _ " </body>" & vbCrLf & _ "</html>" & vbCrLf & _ Miniblink1.LoadHTML(bb) '显示此内容 让网页执行JS代码 可以让浏览器执行JS代码,实现软件和浏览器交互。 Miniblink1.RunJS("这里是JS的代码") 响应浏览器操作 比方,浏览器里有一个按钮,点击按钮,这里可以获取到按钮点击。网页中按钮代码为 <a href="按钮1" target="_blank">按钮文字</a> 事件中: Function Form1_Miniblink1_CreateView(hWndForm As hWnd, hWndControl As hWnd,WebView As wkeWebView,navigationType As Integer,url As CWSTR,windowFeatures as wkeWindowFeatures)As wkeWebView Function = WebView End Function 浏览器的功能非常多,我只是稍微知道一点皮毛,里面的事件和属性非常多,需要更深入的,只能自己研究了。
2026年-1月-21日
312 阅读
0 评论
VisualFreeBasic编程文档
24
25
26
27
28