无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6049|回复: 7
打印 上一主题 下一主题

谁能提供下 QBWIN下载啊现在都找不到了

[复制链接]
跳转到指定楼层
1#
发表于 2008-9-8 22:05:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
谁能提供下 QBWIN下载啊现在都找不到了

谢谢
8#
发表于 2010-1-8 15:33:31 | 只看该作者
QBWIN图形视窗开发系统(使用说明)

--------QBWIN图形视窗开发系统(使用说明)------------------
qbpicc.exe     可将BMP图片转换成GRP格式(QBWIN)专用图片文件或BAS数据代码文件
qwshell.exe    QBWIN 可视化集成开发系统
makebas.exe    将qwshell生成的工程文件制作成BAS源程序文件
bpsf.exe       BAS程序代码格式整理
16.act         PhotoShop 模式-索引颜色下的16色调色板文件,可使BMP图像颜色在QB的640x480x16色下正常显示
    qwshell 可视化集成开发系统,它能快速及简单地编辑窗口内容,用鼠标摆放控件的
位置,随意编辑修改控件属性。即见即所得。
使用说明:
    在工程文件列表中单击鼠标右键菜单, 建立一个新的工程文件(.QWP = VB 里的 .VBP),打开工程文件
工程文件里包含界面程序的窗体文件(.QWF = VB 里的 .FRM), 因为是新建所以这个工程是没有窗体文件(为
空). 接下来单击鼠标右键菜单, 新建一个窗体文件(.QWF), 如果想打开已有的窗体文件,选择菜单'窗体文件
列表', 列表列出已存在的(.QWF)文件, 按鼠标右键菜单'添加', 可将已存在的窗体添加到工程中. 选择其
它菜单进行其它操作, 按'返回'回到当前工程的窗体列表. 选择一个要编辑的窗体文件, 双击或鼠标右键
菜单上的'打开'. 这时你就可以使用控件对窗体进行编辑. 用鼠标单击控件图标, 在可编辑窗口鼠标指针
为"+". 这时单击鼠标就可将你想要的控件添加到你的窗体上, 这时鼠标指针依然为"+", 这时可以继续添加
相同的控件, 如果不想添加想编辑, 可以单击鼠标右键或按工具栏上的鼠标图标进行控件的编辑, 在编辑
状态下按鼠标右键可对控件进行"剪切,复制,粘贴,删除"操作.
    删除选择的控件可直接按 Del 键, 在编辑控件的"热键值"属性时按 Del 键可置为 -1 ,即表示该控
件不设置热键。在编辑属性时按‘回车’键可即时更新控件。
    当将工程文件制作成BAS源程序后,调入开发库QBWIN.QLB,再打开制作的BAS源程序,再继续写事件
触发子程序的代码及其它程序代码。
调用方法(例如:QB 7.1):
    QBX /L QBWIN
    进入QB编辑状态后打开制作的BAS程序。
    运行
-------------------------------------------------------------------------------------
    如果你用QBWIN开发好一个程序并将其编译成EXE文件后。
执行EXE文件,开发库会先打开C:\QBWIN目录下的QBWIN.FNT字库文件,如果当前目录下没有此文件的话,
会到当前目录下找。同样如果你开发的程序需要进行拼音、五笔等输入, 也得有输入法文件.IMD,
如果C:\QBWIN目录没有, 也会到当前目录下找, 所以这两个文件最好统一放在C:\QBWIN
目录下.
    如果你开发的软件无须中文, 那么QBWIN.FNT与QBWIN_??.IMD就无须要了, 程序可独立执行.
QBWIN.FNT        12点字体文件
QBWIN_PY.IMD     拼音输入法文件
QBWIN_DW.IMD     多能五笔输入法文件

    切换输入法的热键是 Ctrl + F1, 你也可以用 GetKey 内部子程序对输入法进行
切换, 使用如下:
GetKey 0     '正常的读取键盘按键值
GetKey -9    '屏蔽掉输入法 (如果你写的软件不希望按 Ctrl + F1 切换输入法时可这样做)
GetKey -8    '取消屏蔽(与上面的相反)
GetKey -1     '打开输入法底栏
GetKey -2     '关闭输入法底栏
GetKey -5     '返回输入法底栏的打开状态
GetKey 350    '打开/关闭输入法切换
-------------------------------------------------------------------------------------
  QBWIN 系统的基本运作原理:
    大家都知道QBWIN开发库的用途了,就是QB + WIN。用QB语言+窗体界面来开发软件程序。
从中,QBWIN开发系统的运作是如何实现的呢?在这里让我来剖析一下它的运作过程。
    首先,初始化系统,也就要包括用到的控件的数组变量,由于考虑到内存空间与实际使用
控件的多少,所以在开始就应该定义你开发的程序将最大限量使用到控件的数量。因为一般
一个窗体及控件在一个界面跳到另一窗体界面时,只有少部分的数据需要保留待处理。所以
当在一个窗体跳到另一窗体时,所有控件的变量值都归初始化状态,以便给另一窗体赋值使用
而需要保留的一些数据用户要用一个全局变量保存下来,这样控件的变量就可循环再用而无需
增加内存空间的占用。这个也是QBWIN能处理多个窗体界面都没有出现内存不足的原因。
    第2步,初始化控件等常用变量后,程序继续执行SUB SystemInit (CFont AS INTEGER)子
程序,这个子程序包括初始化屏幕与调色板的显示方式、检查中文字库文件、检查输入法码表
文件、取得临时文件位置(即在程序运行时有时需要用到临时文件保存一些如图像等数据),
一般由C盘开始,如果C不能作为临时存储的介质,那么就尝试D、E、F....。读取并初始化鼠标
图形数据及状态、读取英文字体数据(由于考虑到一般程序英文字体的显示比中文频繁,所以
系统捆绑英文字库,加快字体的显示速度。如果程序无需用到中文字,那么库就不会去检索中文字
库文件,子程序里有一个CFont参数可让用户决定程序是否用到中文字库,具体如下:
  CFont = 0 时: 不使用中文字库与输入法文件
  CFont = 1 时: 必须要中文字库文件,否则程序不能运行
  CFont =-1 时: 程序作为英文版,如果系统找到有中文字库与输入法文件可使用,否则也可以不使用
    第3步,系统都初始化完后,跟着下来就是控件变量数据的定义,这点就类似于我们在VB或
其它可视化环境里的控件属性栏的定义过程。首先系统会先让用户定义桌面:
    DrawDesktop 提示行开关,桌面颜色,提示行字体颜色,背景色,提示文字$
    提示行开关:0 到 2
    桌面颜色:0 - 15,如果是小于0的负数即跳过,不定义桌面颜色。
    这里还有一个IF ExitWin<2 then DrawDesktop .....
    当用户要关闭当前窗体或调到另一窗体时,必需将ExitWin赋<>0的值,当你关闭窗体给
ExitWin赋值时就有一个注意的地方,因为ExitWin的值会影响屏幕的效果。
    当 ExitWin = 0: 没有关闭窗体,循环执行控件及事件子程序的处理
    当 ExitWin = 1: 关闭窗体退出循环处理,当关闭时会触发C.FormUnload 处理子程序。
参数QBCancel是决定是否确定关闭的关键。如果关闭当前窗体是主窗体,而且Wins没有定义为
调用的另一窗体序号,那么就退出程序。否则调到另一窗体,而且执行桌面重画。
    当 ExitWin = 2: 同ExitWin = 1,但不再执行重画桌面,看要求会有不同的效果。
    跟着就是定义窗体控件数据:
    当Wins的序号不同时:
          RESTORE WIN00
WIN00:
    也要作相对的更改.
LoadWindow X,Y,W,H,Font,BC,Box,TC,Caption
    读入一个窗体:包括初始化所有控件变量,即归0。执行库内部子程序DrawWindow画出一个基本窗体。
继续读入各控件的属性值:
      'LoadMenu   '读入菜单   
      'LoadFrame 0   '读入框架  是否读入到变量
      'LoadLabel 0, 0    '读入标签  是否读入到变量, 背景框
      'LoadText    '读入文本框
      'LoadOption    '读入单选按钮
      'LoadCheck     '读入复选按钮
      'LoadButton 0     '读入命令按钮  背景框
      'LoadList     '读入列表框
      'LoadCombo     '读入下拉式列表框
到这里,一个用户窗体界面基本成形了,最重要的就是ProcessLoop '过程循环处理,这个子程序是
整个系统的中心。它就是实现整体窗体所有控件的事件触发处理的判断及自动化刷新的主过程。
这个子程序是一段源代码程序,方便用户需要时扩充或修改功能。
    过程是这样的:
DO   
    GetMouse Mouse      '取当前鼠标状态数据
    GetKey KeyCode      '取当前键盘状态数据(包括输入法处理)
    C.Timer RecWins, KeyCode      '每处理循环一次都执行该事件子程序
    按钮控件处理
        如果属性 Enabled <> REnabled 时控件自动刷新处理
          当某按钮被单击就会触发事件子程序 SUB C.ButtonClick (NWin, Inx)
          当鼠标在按钮范围内、离开按钮范围、被按下、弹回时触发事件 SUB C.ButtonState (NWin, Inx, State)
    菜单处理
          当菜单项目被选中时触发 SUB C.MenuClick (NWin, MInx, Inx)
    复选按钮处理
        当属性 Value <> RValue or Enabled <> REnalbed 时自动刷新处理
          当复选按钮被单击或复选值Value被刷新时触发事件 SUB C.CheckClick (NWin, Inx)
    下拉列表处理
        当属性 Enabled <> REnalbed 时自动刷新处理
          当下列表被选定后触发事件 SUB C.ComboClick (NWin, Inx)
    框架范围处理
          当框架被鼠标单击时触发事件 SUB C.FrameClick (NWin, Inx, Button)
          双击时 SUB C.FrameDblClick (NWin, Inx)
          鼠标进入框架定义的范围或走出范围时触发事件 SUB C.FrameMouseInOut (NWin, Inx, State)
          当鼠标的坐标改变或鼠标按键状态改变时触发事件 SUB C.FrameMouseState (NWin, Inx, X, Y, Button)
    列表处理
        当属性 Count <> RCount or Index <> RIndex or ScInx <> RScInx 时自动刷新处理
          列表里的项目被单击或选中时触发 SUB C.ListClick (NWin, Inx)
          项目被双击时触发 SUB C.ListDblClick (NWin, Inx)
          当列表里的项目索引Index、滚动范围ScInx、项目数量Count、滚动条等刷新时触发
          SUB C.ListChange (NWin, Inx, CType)
          当在列表里有键盘信号时触发 SUB C.ListKeyPress (NWin, Inx, KeyCode)
    单选按钮处理
        当属性 OptBValue(GInx) <> OpBRValue(GInx) 即选定项目刷新 or Enabled <> REnabled
时刷新显示处理
          当单击或OptBValue(GInx)项目值被改变时触发 SUB C.OptionClick (NWin, GInx, Inx)
    文本框输入处理
        当Enabled <> REnabled 或输入处理时自动刷新显示处理
          当目标在文本框且有键盘信号时触发 SUB C.TextKeyPress (NWin, Inx, KeyCode)
    判断ExitWin,即关闭窗体判断处理
LOOP  
整个循环处理过程大概是这样的。

-------------------------------------------------------------------------------------
    上一章叙述了QBWIN的运作原理,这一章就要说一下QBWIN的功能实现过程与算法:
    1。如果写过鼠标界面的朋友都碰到过一个同样的问题,就是当我们在屏幕上显示图形或什么,刚好位置就在
鼠标指示器的位置时,鼠标一移开该位置,屏幕上显示的内容就被破坏掉了。这样情况相信朋友们都有同感。解决的
方法大家都知道只有在对屏幕刷新前Hide鼠标,刷新后再Show鼠标。但当Hide与Show使用频密时就会出现闪烁现象。
如果我们每刷新一个控件的显示都Hide,Show鼠标。可想而知鼠标指示器的闪烁是如此的频密,由于我们的鼠标操作
不可能在多个目标进行。所以其它目标的控件刷新时就没有必要再对鼠标指示器进行Hide,Show。这样闪烁就会减至
最低,界面看起来也顺畅可观得多。要实现这个过程就要判断鼠标的位置是否在操作目标或刷新控件目标的位置范围
内,只有鼠标位置在目标范围内刷新显示时才进行Hide,Show处理。具体的算法是怎么样?看下面的源代码:
SUB GotPrint (V, X, Y, W, H, Win AS Windows)        ‘判断子程序
  MouseINT 3, 0, MX, My                             ’给出当前Mouse位置坐标
  ML = MX - 16: MT = My - 16                     
  MR = MX + 16: MB = My + 16                     
’我们都知道DOS下的鼠标图形是16x16的当击点(热点)在16,16的位置时,范围就不同了,所以我们预定
‘范围在32x32之间。
  GL = X + Win.X - 5: GT = Win.Y + Y - 5            ‘这里的Win类是窗体的相对位置
  GR = GL + W + 10: GB = GT + H + 10
  V = NOT (ML > GR OR MR < GL OR MT > GB OR MB < GT)       ‘判断范围并返回V的真假
END SUB

    2. 列表控件的实现。做一个列表框的基本结构是列表每项目的字符数,即BW,可视项目的行数,即BH,有了
这两个类属性就基本构成了一个基本的列表界面,列表的项目我们用字符串数组来保存,即ListI(ListNo,Index),
被选定的项目索引Index,列表滚动记录号索引ScInx,列表的数量Count。整个列表系统都由这些类属性变量来实现。
滚动条位置的算法是:% = ScInx / ( Count - BH )。得出当前滚动位置在所有项目的百分比位置,再进行相对位置
的显示。相对用鼠标移动滚动条得出的 ScInx 的算法是:
    ScInx = INT(Count *(( 鼠标绝对Y - (列表相对Y + 窗体相对Y))/ 滚动条有效长度))
    3。文本输入框的实现。
  Text(Inx).BW         ‘可视输入框的字符数,即定义了控件的WIDTH
  Text(Inx).MaxLen      ’最多能输入的字符数量
  Text(Inx).Start      ‘可视的滚动字串位置
  TextTXT(Inx)          ’记录输入的字串变量
  Text(Inx).Locate     ‘在滚动字串位置上的相对光标位置
  在文本输入框中想知道当前光标所处字符串的绝对位置 = State + Locate
    如果我们输入的字符比较多(多出可视区域的字符数)时,就要实现滚动。滚动输入的字符主要对它位置进行
处理。如 TMP$ = MID$(TextTXT(?), Text(?).State, Text(?).BW )。得出的TMP$结果就是滚动后显示的字符串。

    4。中文输入法的实现过程:
       首先,我们来说一下ASCII码与CHR$字符的关系,我们都清楚从0到31是文本控制符,32到127都是英文、数字及
一些常用字符。如:a$ = CHR$(65) ,对应的 a$ = "A"。而中文字符的ASCII范围是从160到255。中文字是由两个字
符组成的,所以一个中文字是由两个从160到255的组合字符构成。如 a$ = CHR$(206) + CHR$(210)。对应变量
a$ = "我"。相反如果想知道一个中文字是由那两个ASCII码组成,我们可以将它拆成两个字符,用ASC()函数就可
知道它的相对ASCII码值。如:
   PRINT ASC( LEFT$(a$ ,1));
   PRINT ASC(RIGHT$(a$ ,1))
结果显示:206  210
        现在我们都明白了中文字的ASCII码组合,我们先来做最简单的“区位”输入法。区位输入的码表纯粹是ASCII的
顺序排列。所以我们只要将区位前两位数+160,后两位数也+160。再将两个数加起来。例如:
    QW = 2532
    ZWF = QW \ 100 + 160          '区位前两位数+160
    ZWB = QW MOD 100 + 160        '后两位数+160
    A$ = CHR$(ZWF) + CHR$(ZWB)    '两个数加起来形成区位表码对应的字符
   
     大家都看到区位输入法的实现就是如此鸡毛蒜皮的事件。现在我们再来实现“拼音”输入法。如果大家执行以下
代码:
    FOR F = 160 TO 255
      FOR B= 160 TO 255
        PRINT CHR$(F) + CHR$(B) ;
      NEXT B
    NEXT F
稍认真看看规律就不难发现它的ASCII码值是按拼音来排列的。除了声调,拼音的重码是非常多的。这样我们就无须每
个字都作拼音码表检索。反之是用拼音来检索所有重码的字就更简单了。如:输入“wo”,即从(206,210)开始就
是拼音“wo”所有重码的字符。其它也依次类推。“拼音”输入法虽然没区位简单,但也是不难实现的。用上述的方法
来实现“拼音”输入是最简捷的方法,但存在一个缺点:就是它只能输入日常常用的字,即只是从160到214之间,算一算
大概有5000个常用字。还有3000多个不常用字的排序方法与之不同,后3000多字是以笔画方式排序的。如果要想实现
一个完整的,就是能输入所有常用及不常用汉字的“拼音”输入法,那么就要专门建立一个“拼音”输入码表检索文件。
在这里就不多谈了。如果有兴趣自己试试。。。。
    简单的“拼音”输入法我们都实现了,但“拼音”的输入速度就以它的重码有着莫大的关系。所以我们现在来实现
最常用的、效率高、重码率低、一个我们中国人“王永民”先生设计的输入法“五笔”输入法。这个不用说了,会打
字的一般都认识“五笔”。打五笔我们就打得多了,但“五笔”输入法是如何实现呢?不清楚的QB朋友不用抓头皮,
看下去你就会理直气壮的说:“原来就这么简单!!!”
    “五笔”不同于以上“拼音”与“区位”输入法,它在ASCII码表里是没有一个排列规律的,ASCII码这个国际通
用的码表排列,我们是不能随便就更改。既然更改ASCII码表的排列是不可能的事情,我们只好自己做个“五笔”编
码专用的码表好了!!。请看以下源代码程序:
    WBX$ = " ggtt=五笔 lwty=输入 ifc=法 yijg=就是 vftc=那么 tuuj=简单 "
    WBX$ = WBX$ + " q=我 bn=也 go=来 yaya=试试 rhf=看 drgo=原来 r=的 pugm=实现 "   
'定义一个基本的码表
    CLS
    PRINT WBX$
    PRINT
    PRINT "请你输入:"
    PRINT "原来五笔输入法的实现就是那么的简单我也来试试看"
    LOCATE 10, 5
    RecInputChr$ = " "          '初始化显示编码及定义光标位置
    PRINT "五笔编码: "
    DO
      IK$ = INKEY$              '读入键盘的ASCII码值
      IF IK$ = CHR$(27) THEN EXIT DO        '按ESC键退出
      IF IK$ = CHR$(13) THEN                '按Enter键重置编码
        InputChr$ = ""
      ELSEIF IK$ = CHR$(8) THEN             '按BackSpace键后退
        IF InputChr$ <> "" THEN InputChr$ = LEFT$(InputChr$, LEN(InputChr$) - 1)
      ELSEIF IK$ <> "" AND IK$ <> CHR$(32) THEN         
'如果键入的不是空格键而且键盘有键按下时编码字符被键入新编码
        InputChr$ = InputChr$ + IK$
      END IF
      IF IK$ = CHR$(32) OR LEN(InputChr$) = 4 THEN      '如果按了空格键或够4码即执行码表检索
        II$ = " " + RTRIM$(InputChr$) + "="
        ST = INSTR(1, WBX$, II$)
        IF ST > 0 THEN
          ST = ST + LEN(InputChr$) + 2
          EN = INSTR(ST, WBX$, " ")
          IF EN = 0 THEN EN = LEN(WBX$)
          ZW$ = MID$(WBX$, ST, EN - ST)                 '检索到的编码字符
          TXT$ = TXT$ + ZW$                             '输入栏字符被输入编码的汉字
          LOCATE 6, 1: PRINT TXT$                       '显示输入的内容
        END IF
        InputChr$ = ""           '编码字符被重置
      END IF
      IF InputChr$ <> RecInputChr$ THEN          '如果当前编码与上次编码有改变即刷新
        LOCATE 10, 15
        PRINT InputChr$ + "    "                 '显示编码字符
        LOCATE 6, LEN(TXT$) + 1, 1               '定义输入栏光标位置
        RecInputChr$ = InputChr$                 '给上次编码赋最新编码内容值
      END IF
    LOOP

    什么??大声点!!!哦!!听到了,对啊!就是如此的简单。但这只是演示了一个最基本的输入过程。但一套完整
的五笔编码表不只是包括以上几个字或词组,而是中国人所用到的所有汉字,包括常用与不常用及极少用的汉字,而且
包括大量的词组。这是不可能用一个变量来实现码表。所以我们应该选择用文件方式来保存这些编码,五笔的编码在网
上很多,我们可以参照它把它处理成一个完整的属于自己的编码文件。在使用时打开它,读取里面的编码表。方法与上
面的源程序差不多,只是看您自己用什么格式来编写您的编码表文件,如何进行最优化的读取。
-------------------------------------------------------------------------------------
更新日期:2003年7月15日
----------------- 最新QBWIN使用教程 --------------------
DECLARE SUB SystemInit (CFont AS INTEGER)      '系统初始化,程序执行前必须要调用该内部子程序
  CFont = 0 时: 不使用中文字库与输入法文件
  CFont = 1 时: 必须要中文字库文件,否则程序不能运行
  CFont =-1 时: 程序作为英文版,如果系统找到有中文字库与输入法文件可使用,否则也可以不使用
DECLARE SUB ScreenInit ()               '屏幕调色板初始化
DECLARE SUB UnLoadMe ()                 '退出系统,退出系统时必须执行的子程序,他会处理一些无用的临时文件
DECLARE SUB CheckDoWord (Loca%, S$)     '整字识别处理
  Loca: 显示字符串的偏移位置
  S$  : 操作目标$ / 返回$
  此子程序解决了中文字的乱码显示问题, 如文本框.
DECLARE SUB GetTempfile (BN AS INTEGER, TmpFileName$)          '给出临时文件子程序
  当用户需要用到临时文件来保存一些内容,这时就可用此子程序来得到最适合的临时文件名。
  由于各机器的环境不同,临时文件的位置也不同,但这个用户不用去干预,QBWIN系统搞定。
  BN:序号,与GetTx、PutTx有关,BN最好不与它们有冲突。
  TmpFileName$:系统分配出来的临时文件名。
DECLARE SUB SetMouseCursor (CursorNo)        '设置鼠标指示器图形
    CursorNo: 指针图形序号
    0:为默认 1:文本输入 2:沙漏 3:手指 4:后的为用户自定义鼠标图形,当然也可以修改0-3的图形
DECLARE SUB MouseINT (m0, m1, m2, m3)   '初始化鼠标状态\鼠标的其它功能调用
     m0,m1,m2,m3 分别是 AX,BX,CX,DX 的中断向量
DECLARE SUB MouseDef (X, Y)      '定义鼠标指示器XY坐标位置
DECLARE SUB MouseHide ()         '鼠标指示器隐藏
DECLARE SUB MouseShow ()         '鼠标指示器显示
DECLARE SUB DisplayMenu (MenuNo, X, Y)       '显示菜单
    MenuNo: 菜单序号    X: X坐标    Y: Y坐标
    当X为-1时表示在鼠标指针位置显示菜单(可做右键功能菜单)
DECLARE SUB MsgBox (KeyB$, Titl$, MSG$)      '信息对话框
    KeyB$: 按钮组合$/返回$   Titl$: 标题$    MSG$: 信息$
    "O"-确定      "Y"-是(Y)     "N"-否(N)     "C"-取消
    "A"-中断(A)   "R"-重试(R)   "I"-忽略(I)   其它可以自行扩充
    当你显示的信息要分行时, 请在想分行的字符前加上一个[`]字符,就键盘的ESC键对下的~ 键
    例如想定义一个退出确认对话框       语句如下:
    ------------------------------------------------------------------------
      KB$ = "OC"   '定义对话框按钮显示为 [确定] [取消] .
      Msgbox KB$, "退出", "是否确定要退出?"
      IF KB$="O" THEN [要退出的语句]      '当返回[确定]按钮时, 执行退出.
      [继续执行的语句]
    ------------------------------------------------------------------------
    *** 这个子程序不但是个消息对话框, 它同时也是个输入对话框.
    当KeyB$开头一个字符为"@"时变为输入对话框, 后面跟的是最多可输入的字符数.
    Titl$: 仍然为标题$, 如果为 "" 时会默认为 "输入"
    Msg$: 预设$/返回输入后的$
    例如想修改某一变量的$, 这样它就大派用场了. 如:
    ------------------------------------------------------------------------
    DefEdit$ = "开发程序"     
    KB$="@40"         '表示改为输入对话框, 并设置最多能输入40个字符.
    Msgbox KB$, "修改为", DefEdit$
    IF KB$="O" THEN
       [确定修改后编写的语句]
    ELSE
       [取消修改后编写的语句]
    ENDIF
    ------------------------------------------------------------------------
    KB$返回的按钮值是"O"[确定]  "C"[取消]
DECLARE SUB SetCombo (Inx, InxNo)            '设置下拉式列表项目
    Inx: 下拉列表序号   InxNo: 要设置的第N个列表项目
DECLARE SUB ListAdd (Inx, InsNo, Item$)      '列表添加项目
    在序号为Inx的列表中的第InsNo个项目前插入Item$项目
    当InsNo插入位置为 -1时即追加
DECLARE SUB ListRemove (Inx, RemNo)          '列表移除项目
    在序号为Inx的列表中移除第RemNo个项目
              如果删除位置RemNo为-1时, 即删除最后一项
                                 -2时, 即全部删除
DECLARE SUB GetKey (KeyCode)    '给出键盘状态信息,同时也可以控制输入法栏
    切换输入法的热键是 Ctrl + F1, 你也可以用 GetKey 内部子程序对输入法进行
切换, 使用如下:
KeyCode = 0: GetKey KeyCode     '正常的读取键盘按键值, KeyCode: 返回的键盘值
GetKey -9    '屏蔽掉输入法 (如果你写的软件不希望按 Ctrl + F1 切换输入法时可这样做)
GetKey -8    '取消屏蔽(与上面的相反)
GetKey -1     '打开输入法底栏
GetKey -2     '关闭输入法底栏
GetKey -5     '返回输入法底栏的打开状态
GetKey 350    '打开/关闭输入法切换
DECLARE SUB GetMouse (Mouse AS ANY)            '给出鼠标状态信息
    TYPE MouseState
        X AS INTEGER    当前X坐标
        Y AS INTEGER    当前Y坐标
       RX AS INTEGER    上一个X坐标
       RY AS INTEGER    上一个Y坐标
        K AS INTEGER    当前按钮状态  1:左  2:右  3:两键同时
       RK AS INTEGER    上一个按钮状态
       DC AS INTEGER    当前左键双击状态
    END TYPE
DECLARE SUB GetTX (X, Y, X2, Y2, BN)        '保存屏幕图形矩阵
    X,Y:无效  X2,Y2:无效
    BN:保存序号   
    0:被系统保留作为常用。
    1到255:即可保存255个全屏内容,需使用临时文件,无须用户干预。
DECLARE SUB PutTX (X, Y, BN)                  '显示保存图形矩阵
    X,Y:无效
    BN:保存时的序号   0:保留   1到255:即用户GetTX时的序号

DECLARE SUB FMNum (Num, Length, Repl$, Num$)   '把数字转换为字符
    Num:待转换的数值  Length:转换字符后的字符长度
    Repl$:替换空白的位置    Num$:返回串
DECLARE SUB DefChr (DChr$, Length)              '定义字符串长度
    DChr$:欲定义串/返回串      Length:定义的长度
DECLARE SUB DelChr (DChr$, Start, Num)       '删除指定位置后的若干个字符
    DChr$:定义/返回的字符串    Start:删除的位置   Num:删除字符数
DECLARE SUB InsChr (DChr$, Position, INS$)    '从指定位置插入字符串
    DChr$:定义/返回的字符串   Position:插入的位置   INS$:插入串
DECLARE SUB Get3DBox (X, Y, W, H, C1, C2, BC)    '绘立体矩阵
DECLARE SUB PrintChr (X, Y, W, H, FC, BC, TXT$) '显示字符串
    X,Y:坐标  W,H:字体宽高  FC:字符颜色  BC:字符背景色  TXT$:欲显示的字符串
DECLARE SUB Get3DCmd (X, Y, W, H, BC, Mode, Win AS ANY)   显示框架风格
    X,Y:窗体内坐标  W,H:宽高  BC:背景色0-15,为负时透明。
    Mode:风格(0-10),当负数时相对多一黑边
    Win:窗体类型(可不变)照输入"Win"
DECLARE SUB GotFocus (V, X, Y, W, H, Mouse AS ANY, Win AS ANY)
    检测鼠标位置是否在 X,Y:窗体相对坐标  W,H:矩阵宽高 内
    V:返回值(0和-1)
DECLARE SUB GotPrint (V, X, Y, W, H, Win AS ANY)
    检测鼠标图形是否在 X,Y:窗体相对坐标  W,H:矩阵宽高 上
    V:返回值(0和-1)
DECLARE SUB GetCursorBinpicData (Cursors AS STRING, BinPics AS STRING)
    返回鼠标图形Cursors数据串与点阵图形BinPic数据串
DECLARE SUB SetCursorBinpicData (Cursors AS STRING, BinPics AS STRING)
    设置鼠标图形Cursors数据串与点阵图形BinPic数据串
    使用这两个子程序可以扩充或更改鼠标图形与点阵图形.

'各控件的事件处理子程序
  NWin:当前调用的窗口序号   Inx:该控件序号   KeyCode:键盘状态值
  Button:鼠标按钮状态  MInx:主菜单序号   GInx:单选组序号
DECLARE SUB C.FormUnload (NWin, QBCancel)           '窗体关闭时触发
DECLARE SUB C.ButtonClick (NWin, Inx)               '按钮单击
DECLARE SUB C.ButtonState (NWin, Inx, State)        '按钮状态
DECLARE SUB C.CheckClick (NWin, Inx)                '复选按钮单击
DECLARE SUB C.ComboClick (NWin, Inx)                '下拉式列表单击
DECLARE SUB C.ListClick (NWin, Inx)                 '列表单击
DECLARE SUB C.ListDblClick (NWin, Inx)              '列表双击
DECLARE SUB C.ListKeyPress (NWin, Inx, KeyCode)     '列表按键
DECLARE SUB C.ListChange (NWin, Inx, CType)         '当列表的索引项目、滚动、项目数量被改变时触发
DECLARE SUB C.MenuClick (NWin, MInx, Inx)           '菜单单击
DECLARE SUB C.OptionClick (NWin, GInx, Inx)         '单选按钮单击
DECLARE SUB C.FrameClick (NWin, Inx, Button)        '框架单击
DECLARE SUB C.FrameDblClick (NWin, Inx)             '框架双击
DECLARE SUB C.FrameMouseState (NWin, Inx, X, Y, Button)      
'当在框架范围内的鼠标坐标、鼠标按键改变被触发
DECLARE SUB C.FrameMouseInOut (NWin, Inx, State)             '当鼠标进入、离开框架范围时被触发
DECLARE SUB C.TextKeyPress (NWin, Inx, KeyCode)     '文本框按键
DECLARE SUB C.Timer (NWin, KeyCode)                 '过程处理事件
'读入控件子程序
DECLARE SUB LoadWindow (X, Y, W, H, Font, BC, Box, TC, T$)
    读入一个窗体
    X,Y:屏幕绝对坐标位置   X为-1时窗体水平居中  Y为-1时窗体上下居中
    W,H:窗体宽高
    Font: 标题字体 = 字体颜色(0-16)*100 + 字型(0-3)*10 + 字模(0-8)
    BC:窗体颜色 (0-15),负数时透明
    Box:关闭按钮选项  -2:不画窗体(全屏方式)  -1:显示并激活  0:显示但禁用  1:隐藏并禁用
    TC:标题栏 = 标题栏模式(0-2)*100 + 标题栏颜色(0-15)
    T$:标题
DECLARE SUB LoadButton (Cmd)
DECLARE SUB LoadCheck ()
DECLARE SUB LoadCombo ()
DECLARE SUB LoadLabel (Memo, Cmd)
DECLARE SUB LoadList ()
DECLARE SUB LoadMenu ()
DECLARE SUB LoadOption ()
DECLARE SUB LoadFrame (Memo)
DECLARE SUB LoadText ()

--------------------------- 控件说明 -----------------------------
           控件     控件名
窗口控件 Windows > WIN.属性
属性说明:  
  X: X坐标       -1: 向中间对齐
  Y: Y坐标           同上
  W: 宽度
  H: 高度
BC: 背景色      
变量: Wins: 调用窗口序号
      ExitWin: 退出当前窗口
        =0: 执行过程循环(窗口运行时)
        =1: 退出当前窗口, 若调用其它窗口时重画背景
        =2: 退出当前窗口, 若调用其它窗口时保留原来背景
菜单控件 MenuBox > Menu(菜单,项目).属性
属性说明:  
Enabled: 是否激活
   Value: 选择(-1:打勾  0:无  1:箭头), 菜单项目字体:(字型(0-3)*10 + 字模(0-8))*10
          对于主菜单项目该值无意义,
          而它的值决定的是该项主菜单项目的光带颜色(0-16).0:默认    1-16表示颜色0-15
         
变量: SumMMenu: 菜单总数
      SumMenu(菜单): 菜单项目总数
      MenuCap(菜单, 项目): 标题$   当标题$以"&"开关,后面跟的是颜色号(0-15),这样就成了颜色条
      MenuHotkey(菜单): 热键值     -1=无
标签控件 LabelBox > Label(序号).属性
属性说明:  
     X: X坐标
     Y: Y坐标
    BW: 显示区字符数  0:自动
    FC: 字体颜色
    BC: 背景色   -1:为透明
    FW: 字宽
    FH: 字高
    FM: 字型模式 = 颜色号(0-16)*100 + 字型(0-3)*10 + 字模(0-8)
Style: 显示风格      0:左对齐  1:右对齐
变量: LabelCap(序号): 标签标题$
      SumLabel: 序号总数
框架控件 FrameBox > Frame(序号).属性
属性说明:  
  X: X坐标
  Y: Y坐标
  W: 宽度
  H: 高度
变量: SumFrame: 序号总数
文本控件 TextBox > Text(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
       BW: 可视区字符数
Password: 0:正常字符显示   -1:*号密码显示   为正数时=字型(1-3)
   MaxLen: 最多输入字符数   0:禁止输入任何字符
       FC: = 输入框背景(0-16)*100 + 字体颜色(0-15)
  Enabled: 当前激活状态
REnabled: 上次激活状态
   Hotkey: 热键值  -1=无
      G3D: 是否立体效果  -1:立体  0:平面框  1:下拉列表支缓  2:无边框
    Start: 显示的区域
   Locate: 当前光标位置
变量: TextTxt(序号): 输入的文本$
      SumText: 序号总数
全程变量:
      CutBoard: 文本框剪贴板缓冲$
编辑键说明: Ctrl+Del: 剪切   键值=403
            Ctrl+Ins: 粘贴   键值=402
            Ctrl+C  : 复制   键值=3
            Home    : 跳到最前
            End     : 跳到最后
            Tab     : 跳到下一个文本框
            Del     : 删除光标后一个字符
           Backspace: 删除光标前一个字符
单选控件 OptionBox > OptB(组号,项目号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
  Enabled: 当前激活状态
REnabled: 上次激活状态
   Hotkey: 热键值    -1=无
变量: OptBValue(组号): 选择项目值
      OptBRValue(组号): 上一次选择项目值
      OptBCap(组号,项目号): 标题$
      SumOptG: 总组数
      SumOptI(组号): 总项目数
复选控件 CheckBox > Check(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
  Enabled: 当前激活状态
REnabled: 上次激活状态
    Value: 当前选择状态
   RValue: 上次选择状态
   Hotkey: 热键值     -1=无
变量: CheckCap(序号): 标题$
      SumCheck: 序号总数
按钮控件 ButtonBox > Button(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
        W: 宽度
        H: 高度
       FC: = 按钮模式(0-1)*100 + 字体颜色(0-15)
           按钮模式0:普通按钮     1:浮动式按钮
       FW: 字型模式 = 颜色号(0-16)*100 + 字型(0-3)*10 + 字模(0-8)
       FH: 字高
  Enabled: 当前激活状态
REnabled: 上次激活状态
   Hotkey: 热键值    -1=无
变量: ButtonCap(序号): 标题$
      SumButton: 序号总数
列表控件 ListBox > ListB(序号).属性
属性说明:  
      X: X坐标
      Y: Y坐标
     BW: 字符数     当BW=0时, 该控件会作为垂直的滚动条
    Col: 列表列数
    Loc: 项目显示偏移位置   (一般为0不偏移)
     BH: 行数
  Index: 索引值
RIndex:
  ScInx: 滚动值
RScInx:
  Count: 项目总数
RCount:
Hotkey: 热键值  -1:无   -2:隐藏列表选择光带   -3:隐藏列表内容
    G3D: 是否立体效果  -1:立体  0:平面框   1:无边框
变量: ListI(序号,项目号): 项目标题$
      当项目标题$的第一个字符为CHR$(255)时,定为颜色条项目.CHR$(255)后面跟颜色代码.如CHR$(255)+"12"
      SumList: 序号总数
配合子程序: ListAdd (序号,插入位置,项目$) 如果插入位置为-1时,即追加
            ListRemove (序号,删除位置)
              如果删除位置为-1时,即从最后删除
                            -2时,即全部删除
下拉式列表控件 ComboBox > Combo(序号).属性
属性说明:  
        X: X坐标
        Y: Y坐标
       BW: 字符数
      Col: 列表列数
  Enabled: 当前激活状态
REnabled: 上次激活状态
      G3D: 是否立体效果  -1:立体  0:平面框  1:与文本框支缓配合使用可成为可  -2:无边框
                         -3:隐藏              编辑式下拉列表
变量: ComboTxt(序号): 标题$  当标题$的第一个字符为CHR$(255)时,定为颜色条.
      SumCombo: 序号总数
配合子程序: SetCombo (序号,索引值)

------------------------ 其它重点技巧问题补充 --------------------
    该开发控件是半自动化编程环境, 它基本上已经包含了控件的一般自动化更新效
果, 无需开发者去做一些显示效果的过程, 在自动更新过程中不会破坏你的视窗, 所
有效果以动画式完成. 界面稳定, 友好. 让你很轻松地编写自己的程序.
    自动化更新是有条件的, 但当开发库无能为力帮助你自动更新控件显示时, 怎么
办呢? 很难免就会考虑到这个问题. 这个问题就是"半"自动化的原因, 当超出了开发
包的自动化"条件"时, 就需要您写一句更新命令了. 放心, 那可只是一句赋值语句而
以. 原理上是可以编写一个全自动化控件的, 但由于内存和其它等等其它限制的实
际问题,只好考虑常用的基本功能以得出最优化最简洁的开发包. 对于开发程序,本人
会考虑到开发者的需要而不断的完善. 所以希望大家在使用中如有其它意见和建议,
请与我联系.
****** 各控件的自动化条件(说明)如下 ******
以下的[自动化属性]的属性变量值一旦改变开发程序会自动更新效果
以下的[人工更新属性]的属性变量值由开发者编写赋值.

           控件名  自动化属性           人工更新属性(条件)
标签控件   Label   LabelCap(I)          LabelRCap(I)<>LabelCap(I)时
文本控件   Text    Text(I).Enabled      Text(I).REnabled<>Text(I).Enabled时
单选控件   OptB    OptB(M,I).Enabled    OptB(M,I).REnabled<>OptB(M,I).Enabled
                   OptBValue(M)         OptBRValue(M)<>OptBValue(M)时
复选控件   Check   Check(I).Enabled     Check(I).REnabled<>Check(I).Enabled
                   Check(I).Value       Check(I).Value<>Check(I).RValue时
按钮控件   Button  Button(I).Enabled    Button(I).REnabled<>Button(I).Enabled
列表控件   ListB   ListB(I).Index       ListB(I).RIndex<>ListB(I).Index时
                   ListB(I).ScInx       ListB(I).RScInx<>ListB(I).ScInx时
                   ListB(I).Count       ListB(I).RCount<>ListB(I).Count时
           注意: 当使用子程序 ListAdd 与 ListRemove 时也会自动更新
下拉式列表控件
           Combo     Combo(I).Enabled     Combo(I).REnabled<>Combo(I).Enabled
           注意: 当使用子程序 SetCombo 时自动更新
-------------------------------------------------------------------------------
    实际上的使用中, 以上的自动化属性其实都已经足够了. 但有时您想当单击列表
1的时候(假设读入了2个列表, 现在想对列表1操作), 输入框同时能编辑列表被选定的
那一项的内容. 于是您就在事件发生子程序 C.ListClick 中加入语句如下:
SUB C.ListClick (NWin, Inx)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
  CASE 101:                    '假设当前窗口序号为1
    TextTXT(0) = ListI( 1, ListB(1).Index)      '假设是第1个输入框
    [ Text(0).REnabled = -2 ]      '这里=-2是保证了不与0或-1的值相等
  END SELECT
END SUB
结果: 假如没有编写 [] 里的一条语句, 输入框是无法更新的.
技巧: 用这句更新的语句原理, 可以对想更新控件的颜色值、标题等等进行半自动化
    更新.

<<<<<<<<<<<<<<<<<<<< 联络 >>>>>>>>>>>>>>>>>>>
     Q Q: 86382197
  E-Mail: andy_cui@21cn.com


\
QWshell 2004 可视化集成开发系统
Build:040614
    更新了QBWIN.REC,MsgBox输入框可设置为密码输入框,调用方法:
  MsgBox "*10" ,"`请输入密码:" ,PW$
    "*"开头表示设置对话框为密码输入框,"*10":表示密码输入最长位数。
Build:040530
    修正了OptB单选项目的生成处理问题及LoadGetData的显示模式3的显示问题。编译为正
式版本(186K),之前编译的都是Debug的调试版本(214K)(可按Ctrl+Break)中止调试。如果
使用有问题请通知我。
Build:040425
    与QBWIN Build:040425一同发布
--------------------------------------------------------------------------------
QBWIN 图形视窗界面开发库
Build:040530
    修正了LoadGetData的显示模式3的显示问题。
Build:040425
    解决了列表项目数定义太小的限制:由于变量空间的内存限制,列表项目的项目数
  定义时也有限制,例如想要定义2个列表,每列表需要5000个记录项目,这时设置
  MaxList = 1, MaxListItem = 5000。这时就会因变量空间不足而不能运行,只好
  将项目数减少到1000个或更少,不能满足需要。这次的更新版本可解决这个问题了。
  
  如果MaxListItem的数量需求比较大,例如1000个以上的,MaxListItem的值可随你
  定义,这个版本的列表项目数量已经不受MaxListItem限制了。例如定义:
    MaxList = 1, MaxListItem = 100。但列表项目数可达到32767个。
    但如果你的程序所需用到的MaxListItem比较少(1000个以下的),MaxListItem的值
  请定义在所需数量范围里。如:MaxListItem = 500。
  这里还有一个重要的常量定义ListItemBuffer,其最初默认值为64,表示列表项目
  的字符长度为64个字符,这可依实际的需要定义。
Build:040420
    解决了列表的Index和rIndex的数值更新问题。
Build:040420
    更改了进度条的显示问题。
Build:040405
    更新及丰富了进度条的显示方式,添加了跳格式进度条。
Build:040325
    解决了生成BAS源程序后运行,无法读入进度条的错误。
    去除了QWShell的一些BUG。
Build:040208
  添加了Photoshop用的16色调色板文件: 16.ACT,它可让你在Photoshop里
  处理16色的图片,能在QB里正常显示图片颜色。

--------QBWIN图形视窗开发系统(使用说明)------------------
回复

使用道具 举报

7#
发表于 2009-4-2 09:29:47 | 只看该作者
原帖由 woshilehaha 于 2008-9-9 16:17 发表
http://qbasicgui.datacomponents.net/gui.php?id=36

是要这个吗?


一直不会这个,能发个详细的教程么?

[ 本帖最后由 caozhi256 于 2009-4-2 09:42 编辑 ]
回复

使用道具 举报

6#
发表于 2009-3-31 11:55:34 | 只看该作者
以前就想diy一个如一键恢复的结果搜索资料说这个东西运行不怎么快就没继续了-_-!!。
回复

使用道具 举报

5#
发表于 2009-3-31 10:26:18 | 只看该作者

回复 #3 yichya 的帖子

图形视窗开发软件。。。
回复

使用道具 举报

4#
发表于 2009-3-31 07:03:37 | 只看该作者
我也下载了 虽然还不会用 谢谢楼主
回复

使用道具 举报

3#
发表于 2008-9-9 21:35:25 | 只看该作者
QBWIN是什么?
回复

使用道具 举报

2#
发表于 2008-9-9 16:17:53 | 只看该作者
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-26 05:35

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表