无忧启动论坛

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

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

[复制链接]
跳转到指定楼层
1#
发表于 2004-5-11 12:35:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[UploadFile=34_2250.jpg][这个贴子最后由k011003179在 2004/06/11 11:52pm 第 4 次编辑]

这是我自己做的界面:

想拥有自己的一键恢复吗?自己编写程序!
网有很想改foxmao的一键恢复的信息,不过这样是对作者的不敬,大家倒不如自己写个,而且编写的过程也是一种学习呀!
下面我就介绍一下:
我从网站看过foxmao的一键恢复,从界面看是使用qbwin画出来的。大家不要觉得奇怪我会知道,因为我自己本身写程序,界面几乎都是用它。
我并没有看过foxmao的源代码,不过我可以做个构思,大家自己可以去编
界面看是使用qbwin画出来(qbwin的作者的使用说明有很详细的解说)
然后在Button.chick的事件中,用run的命令进行调用ghost.exe
至于,密码,其实很简单,可以用read、input的命令就可以。
好了只能说到这里,接下来的就要靠你们自己的哦!!
不知道foxmao是不是这样子的!
这是我自己做的一键恢复,在这个程序前面还加入了密码对话框!要输入密码才能执行的!


现在还要好多人给我发邮件,信息需要源码. 我已经好久不弄了. 具体的源码大家可以在第20页上找到:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=25927&extra=&highlight=%D2%BB%BC%FC%BB%D6%B8%B4&page=20

[ 本帖最后由 k011003179 于 2009-5-21 22:43 编辑 ]
2#
发表于 2004-5-11 14:32:30 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

谢谢楼主的无私帮助:)
无忧有你、有你这样的精神为荣,与你同为坛友我感到很高兴:)
回复

使用道具 举报

3#
发表于 2004-5-11 14:45:58 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

问题是不会写啊!先生
回复

使用道具 举报

4#
 楼主| 发表于 2004-5-11 16:02:56 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

[这个贴子最后由k011003179在 2004/05/31 08:28pm 第 1 次编辑]

只需画好界面后在Button.chick的事件中,用shell的命令进行调用ghost.exe就行
回复

使用道具 举报

5#
发表于 2004-5-11 16:17:22 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

强烈建议楼主说说qbwin的使用方法!!!!!!!!!!11
回复

使用道具 举报

6#
发表于 2004-5-11 16:27:28 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

[这个贴子最后由pizigao在 2004/05/11 04:33pm 第 1 次编辑]

:em02:
回复

使用道具 举报

7#
发表于 2004-5-11 17:31:03 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

qbwin是什么样的?它的全称是什么名字.qbwin的使用?qbwin的软件在哪里有下载的?

点评

混沌剑神 www.aoswx.com/book/991.html 永生之门www.gmwxw.com/book/4185.html  发表于 2014-9-26 15:04
回复

使用道具 举报

8#
发表于 2004-5-11 20:04:02 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

http://qbwin.web165.com/
用好了说一声,祝大家早日做出自己的作品。
回复

使用道具 举报

9#
 楼主| 发表于 2004-5-11 21:14:31 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

  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  
整个循环处理过程大概是这样的。
回复

使用道具 举报

10#
 楼主| 发表于 2004-5-11 21:15:33 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

----------------- 最新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
结果: 假如没有编写 [] 里的一条语句, 输入框是无法更新的.
技巧: 用这句更新的语句原理, 可以对想更新控件的颜色值、标题等等进行半自动化
    更新.
回复

使用道具 举报

11#
发表于 2004-5-11 21:33:01 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

谢谢楼主的无私帮助,真是太好了,再问几个问题:
            1。关于 button click事件如何使用。
            2。如何把用QBWIN画好的图加入到QB程序中
           3。怎样生成EXE文件。
想信这也是许多人要问的问题。。。。。。。。。
回复

使用道具 举报

12#
 楼主| 发表于 2004-5-11 21:41:09 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

下面引用由889882004/05/11 09:33pm 发表的内容:
谢谢楼主的无私帮助,真是太好了,再问几个问题:
            1。关于 button click事件如何使用。
            2。如何把用QBWIN画好的图加入到QB程序中
           3。怎样生成EXE文件。
...
1.关于 button click事件,可以这样,在CASE 1中添加
   
SUB C.ButtonClick (NWin, Inx)
  Sel = NWin * 100 + Inx
  SELECT CASE Sel
    CASE 1:
      KB$ = "OC"
      MsgBox KB$, "确定", "您确定要备份C盘吗?"
      IF KB$ = "O" THEN RUN "ghost.exe"
END
2.可以用qbwin自带的软件MAKEBAS.EXE,把图片的代码加入.bas文件中
3.至于怎样生成exe文件,我想学过qb的人都知道,要用quick basic 7或vb for dos就可以了
回复

使用道具 举报

13#
发表于 2004-5-11 22:30:57 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

Quick Basic 7.1哪里有下呀?找了半天没有呀!!!!!!!!!
回复

使用道具 举报

14#
发表于 2004-5-11 22:59:31 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

我还以为是C语言写的呢?
是我眼浊了!
不过Turbo C++ 也可以达到这个效果,我也写了一个,本机中可以运行,有一些机子不行,可能是显示的问题。。。
回复

使用道具 举报

15#
 楼主| 发表于 2004-5-11 23:06:16 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

下面引用由889882004/05/11 10:30pm 发表的内容:
Quick Basic 7.1哪里有下呀?找了半天没有呀!!!!!!!!!
多搜索一下吧,我也忘了是那下载的
回复

使用道具 举报

16#
发表于 2004-5-11 23:48:25 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

为什么在QFWIN中的下拉列表我已经设定了下拉列表的列数,可就是不显示.那我如何给下拉列表填加文字加以修改呀?
不有你那张图做得不错可不可以上传源代码呀?
回复

使用道具 举报

17#
 楼主| 发表于 2004-5-12 00:22:51 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

关于设定了下拉列表的列数和给下拉列表填加文字加以修改,你只要运行qwshell.exe进行画图就可以了,里面可以选择下拉列表的列数和给下拉列表填加文字
回复

使用道具 举报

18#
发表于 2004-5-12 08:18:30 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

好文章!学习!
回复

使用道具 举报

19#
发表于 2004-5-12 11:03:30 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

晕死我了,那么多,好麻烦的呀,有没有简单一点的啊,看的我的眼都红了啊
回复

使用道具 举报

20#
发表于 2004-5-12 12:04:11 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

[这个贴子最后由crshen在 2004/05/17 03:46pm 第 1 次编辑]

我没学过Basic,不过看了下VBDos的帮助,好像Run命令不支持命令行参数,是不是要另外编批处理文件(备份和恢复各一个),再调用它。这样的话,要多出好几个文件(包括热启动程序),没有C语言的spawnl()函数简洁,但用C编windows界面实在太累了。
void restart() /*C语言内联汇编实现热启动*/
{
    asm MOV AX,0040H
    asm PUSH AX
    asm POP DS
    asm MOV AX,1234H
    asm MOV SI,0072H
    asm MOV[SI],AX
    asm MOV AX,0FFFFH
    asm PUSH AX
    asm MOV AX,0000H
    asm PUSH AX
    asm RETF
}
case '1' : /*备份*/
        result=spawnl(P_WAIT,"ghost.exe"," -clone,mode=pdump,src=1:1,dst=c:\system.gho","-fx","-sure","-rb" );
        if(result==-1)
        perror("任务没有完成,请重新启动系统");
        break ;
        
        case '2' : /*恢复*/
        result=spawnl(P_WAIT,"ghost.exe"," -clone,mode=pload,src=c:\system.gho:1,dst=1:1","-fx","-sure","-rb" );
        if(result==-1)
        perror("任务没有完成,请重新启动系统");
        break ;
下面的链接可实现多系统备份

http://bbs.wuyou.net/cgi-bin/top ... ;start=60&show=
回复

使用道具 举报

21#
发表于 2004-5-12 12:25:56 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

下面引用由889882004/05/11 10:30pm 发表的内容:
Quick Basic 7.1哪里有下呀?找了半天没有呀!!!!!!!!!
地址
http://bjzx.sdedu.net/Soft_Show.asp?SoftID=5
回复

使用道具 举报

22#
发表于 2004-5-12 12:38:41 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

下载了一键恢复4.3版,解压出其中的setup.zip,密码为lisa1207(不要问我怎么得到的哦),将setup.exe用upx解压,查看后发现的确为QBWin编写(有'QBWIN.FNT' not found!字样),“pqmagic /cmd=2g.pqs”,“boot.exe /Ff10.bin /Mf10.scr /s”均为带参数运行,不知用QB如何实现,请熟悉Basic的人指点一下,不胜感激!
回复

使用道具 举报

23#
发表于 2004-5-12 13:02:13 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

shell(命令行)
回复

使用道具 举报

24#
发表于 2004-5-12 13:08:05 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

下面引用由开心狗2004/05/12 01:02pm 发表的内容:
shell(命令行)
谢谢指点!
回复

使用道具 举报

25#
发表于 2004-5-12 13:29:32 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

谢谢"fei"兄,我下了。
回复

使用道具 举报

26#
发表于 2004-5-12 13:48:43 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

下面引用由crshen2004/05/12 12:38pm 发表的内容:
下载了一键恢复4.3版,解压出其中的setup.zip,密码为lisa1207(不要问我怎么得到的哦),将setup.exe用upx解压,查看后发现的确为QBWin编写(有'QBWIN.FNT' not found!字样),“pqmagic /cmd=2g.pqs”,“boot ...
其中将setup.exe用upx解压,
不知是什么意思, SETUP文件如何解压,UPX又是做什么用的。请说明。
回复

使用道具 举报

27#
发表于 2004-5-12 14:08:03 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

话音未落,那边4.33版就出来了,体积大到超过一个优盘上的WIN98。
还是自己做一个合用!
回复

使用道具 举报

28#
发表于 2004-5-12 16:48:17 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

DEFINT A-Z
''-------------------------------------------------------------------
''定义各控件最多可用的数目:
''** 依控件使用的数目进行相对的修改, 节省内存容量
CONST MaxButton = 10, MaxCheck = 5, MaxOptG = 2, MaxOptI = 5
'' 按钮 复选按钮 单选按钮(组数),(每组项目数)
CONST MaxFrame = 5, MaxList = 1, MaxListItem = 20, MaxText = 5
'' 框架 列表框 , 每一列表项目数 文本框
CONST MaxCombo = 5, MaxLabel = 5, MaxMainMenu = 5, MaxMenuItem = 10
'' 下拉式列表 标签 菜单 菜单项目
CONST MaxPercent = 0
''** 依你所需要的列表滚动速度进行设置(-1到10)
CONST ListScrollSpeed = 1 ''列表屏幕滚动速度(-1最快)
''$INCLUDE: ''..\qbwin\qbwin.BI''
''$INCLUDE: ''..\qbwin\Qbwin.DAT''
SystemInit 1 ''系统初始化
''0:不使用中文字库与输入法文件
''1:必须要中文字库文件(QBWIN.FNT),否则程序不能运行
''-1:如果程序找到有中文字库与输入法文件时可以使用,可以不使用

''定义及初始化用户变量区域 ----------------------------

''-----------------------------------------------------

DO
''桌面定义
''格式: DrawDesktop 提示行开关,桌面颜色,提示行字体颜色,背景色,提示文字$
IF ExitWin < 2 THEN DrawDesktop 2, 3, 0, 7, "按 Ctrl+F1 键打开/关闭输入法"
''各表单控件读入区域, 读入各种控件之间用 [=] 表示该种控件读完
SELECT CASE Wins
CASE 0:
''读入窗口
''格式: LoadWindow X,Y,W,H,Font,BC,Box,TC,Caption
LoadWindow -1, -1, 530, 380, 1125, 7, -1, 1, "实例源程序"
''说明:
'' X: X坐标 -1: 向中间对齐
'' Y: Y坐标 同上
'' W: 宽度
'' H: 高度
''Font: 字型 (0-5)
'' BC: 背景色(0-15)
'' Box: 0:禁止关闭按钮 -1:可用关闭按钮 1:屏蔽关闭按钮
'' TC: 标题栏颜色
''Caption: 窗口标题
''变量: Wins: 调用窗口序号
'' ExitWin: 退出当前窗口
'' =0: 执行过程循环(窗口运行时)
'' =1: 退出当前窗口, 若调用其它窗口时重画背景
'' =2: 退出当前窗口, 若调用其它窗口时保留原来背景
RESTORE WIN00
WIN00:
''热键值: Alt+ F1=360 1=376 Q=272 A=286 Z=300
LoadMenu ''读入菜单
''格式: DATA [-,Hotkey,] Enabled,Value,Caption []里的参数为分组用
DATA -,289,4,0,文件(F)
''主菜单, 热键为Alt+F, 键值为289
DATA 1,100,"显示(1)"
DATA 1,0,激活/禁用<实例>菜单(2)
DATA 1,0,
''标题为空时, 为阻隔线
DATA 1,0,退出(X)
DATA -,290,0,5,G.实例
''主菜单, 热键为Alt+G, 键值为290
DATA 1,-1,"1.激活文本输入框"
''复选式
DATA 1,0,
DATA 1,1,A.激活下拉列表
DATA 1,0,B.禁用下拉列表
''单选式
DATA -,-1,1,1,
DATA 1,0,"&1 "
DATA 1,0,&2
DATA 1,0,&3
DATA 1,0,&4
DATA 1,0,&5
DATA 1,0,&6
DATA =
SumMMenu = SumMMenu - 1 ''隐藏鼠标右键菜单
''表示菜单控件读入完毕
''说明:
'' Hotkey: 热键值
'' Enabled: 是否激活
'' Value: 是否选择(-1到1), 0:普通 -1:打钩 1:三角箭头
'' 对于主菜单项目该值无意义, 而它的值决定的是该项主菜单项目的光
'' 带颜色(0-15).
''菜单单击事件子程序: C.MenuClick
''----框架被读入到变量中
LoadFrame 1 ''读入框架 是否读入到变量
''格式: DATA X,Y,W,H,FC,FM,BC,Mode,Caption
DATA 220,180,120,90,1,0,15,6,""
DATA =
''----普通的显示式框架
LoadFrame 0 ''读入框架 是否读入到变量
''格式: DATA X,Y,W,H,FC,FM,BC,Mode,Caption
DATA 5,30,350,300,1,2,-1,7,框架
DATA =
'' X: X坐标
'' Y: Y坐标
'' W: 宽度
'' H: 高度
'' FC: 标题字体颜色
'' BC: 背景色
''Mode: 框架风格(0-7)
''以下两个事件子程序只有在框架被读入到变量后才能发生
''框架按钮事件子程序: C.FrameClick
''框架双击事件子程序: C.FrameDblClick
LoadLabel 0, 0 ''读入标签 是否读入到变量, 背景框
''格式: DATA X,Y,BW,FW,FH,FC,BC,FM,Style,Caption
DATA 380,30,0,14,32,0,-1,6,0,"Ctrl+F1`切换输入法"
DATA 230,160,0,16,12,0,-1,8,0,请按鼠标右键
DATA 10,337,0,14,12,0,-1,25,0,"进度条:"
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 显示区字符数 0:自动
'' FW: 字宽
'' FH: 字高
'' FC: 字体颜色
'' BC: 背景色 -1:透明
'' FM: 字型模式 0:正常 1:凹陷 2:突出 3:粗体
'' Style: 显示风格 0:左对齐 1:右对齐
LoadText ''读入文本框
''格式: DATA X,Y,BW,Enabled,FC,PassWord,MaxLen,Hotkey,3D
DATA 20,50,30,0,0,0,100,-1,-1
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 可示字符数
'' Enabled: 当前激活状态
'' FC: 字体颜色
'' MaxLen: 最多输入字符数
'' Hotkey: 热键值
'' G3D: 是否立体效果
''编辑键说明: Ctrl+Del: 剪切 403
'' Ctrl+Ins: 粘贴 402
'' Ctrl+C : 复制 3
''
''文本框键盘事件子程序: C.TextKeyPress
LoadOption ''读入单选按钮
''格式: DATA [-,Value,] X,Y,Enabled,Hotkey,Caption []里的参数为分组用
DATA -,0,20,90,1,-1,组1(0)
DATA 20,110,1,-1,组1(1)
DATA -,1,120,90,1,-2,组2(0)
DATA 120,110,0,-2,组2(1)
DATA 120,130,1,-2,组2(2)
DATA =
''说明:
'' Value: 被选择的项目序号 *对应的变量是OptBValue(组序号)
'' X: X坐标
'' Y: Y坐标
'' Enabled: 当前激活状态
'' Hotkey: 热键值
''单选按钮单击事件子程序: C.OptionClick
LoadCheck ''读入复选按钮
''格式: DATA X,Y,Enabled,Value,Hotkey,Caption
DATA 220,90,1,1,-1,Check1
DATA 220,110,0,0,-2,复选按扭2
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' Enabled: 当前激活状态
'' Value: 当前选择状态
'' Hotkey: 热键值
''复选按钮单击事件子程序: C.CheckClick
LoadButton 0 ''读入命令按钮 背景框
''格式: DATA X,Y,W,H,Enabled,FC,FW,FH,Hotkey,Caption
DATA 380,100,120,35,1,105,22,12,-1,按钮1
DATA 380,150,80,25,1,101,30,12,-1,按钮2
DATA 380,210,80,40,1,213,5,12,-1,"打开`输入法"
DATA 380,270,80,40,1,1,25,12,-1,"关闭`输入法"
DATA 210,305,20,17,1,1,0,12,-1,"-"
DATA 260,305,20,17,1,1,0,12,-1,"+"
DATA =
''说明:
'' X: X坐标
'' Y: Y坐标
'' W: 宽度
'' H: 高度
'' Enabled: 当前激活状态
'' FC: 字体颜色
'' FW: 字宽
'' FH: 字高
'' Hotkey: 热键值
''按钮单击事件子程序: C.ButtonClick
LoadList ''读入列表框
''格式: DATA X,Y,BW,Col,BH,Hotkey,3D
DATA 20,160,20,1,8,-1,-1
DATA =
ListAdd 0, -1, "列表项目0"
ListAdd 0, -1, "列表项目1"
ListAdd 0, -1, "列表项目2"
ListAdd 0, -1, "列表项目3"
ListAdd 0, -1, "列表项目4"
ListAdd 0, -1, "列表项目5"
ListAdd 0, -1, "列表项目6"
ListAdd 0, -1, "列表项目7"
ListAdd 0, -1, "列表项目8"
ListAdd 0, -1, CHR$(255) + "5"
ListB(0).Index = 2 ''定义列表索引值为2, 若不定义值为-1即没有选定项目
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 字符数
'' BH: 行数
'' Hotkey: 热键值
'' G3D: 是否立体效果
''变量: ListI(序号,项目号): 项目标题$
''配合子程序: ListAdd (序号,插入位置,项目$) 如果插入位置为-1时,即追加
'' ListRemove (序号,删除位置)
'' 如果删除位置为-1时,即从最后删除
'' -2时,即全部删除
''列表单击事件子程序: C.ListClick
''列表双击事件子程序: C.ListDblClick
''列表键盘事件子程序: C.ListKeyPress
LoadCombo ''读入下拉式列表框
''格式: DATA X,Y,BW,Col,Enabled,Hotkey,3D
DATA 20,290,20,2,1,-1,-1
DATA =
ListAdd 1, -1, "下拉列表项目0"
ListAdd 1, -1, "下拉列表项目1"
ListAdd 1, -1, "下拉列表项目2"
ListAdd 1, -1, "下拉列表项目3"
ListAdd 1, -1, "下拉列表项目4"
ListAdd 1, -1, CHR$(255) + "3"
ListAdd 1, -1, CHR$(255) + "13"
ListAdd 1, -1, CHR$(255) + "15"
ListAdd 1, -1, CHR$(255) + "5"
SetCombo 0, 3 ''设置下拉列表的索引值为3 相对ListB(1).Index=3
''说明:
'' X: X坐标
'' Y: Y坐标
'' BW: 字符数
'' Enabled: 当前激活状态
'' G3D: 是否立体效果
''变量: ComboTxt(序号): 标题$
''配合子程序: SetCombo (序号,索引值)
''下拉列表单击事件子程序: C.ComboClick
''---------------------------------
''过程循环处理事件子程序: C.Timer
''不妨到各个事件子程序看看.
LoadPercentBar ''读入进度条
''格式: DATA X,Y,W,H,FC,BC,Style
DATA 70,335,440,15,1,7,11
DATA =
''显示进度条子程序 ShowPercentBar 序号,百分值,PercentBar(),Win
END SELECT
ProcessLoop ''过程循环处理
LOOP
SUB C.ButtonClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
CASE 1: Button(2).Enabled = NOT Button(2).Enabled
CASE 2: Check(1).Enabled = NOT Check(1).Enabled
CASE 3:
''PutTX 0, 0, 1
GetKey -1 ''打开输入法
CASE 4:
GetKey -2 ''关闭输入法
SHARED KeyCode
KeyCode = -5
END SELECT
END SUB
SUB C.ButtonState (NWin, Inx, State)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 3:
''PRINT State;
CASE 5, 6:
SHARED PassKey
PassKey = 0
IF State = 2 THEN PassKey = Inx
END SELECT
END SUB
SUB C.CheckClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.ComboClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.FormUnload (NWin, QBCancel)
SELECT CASE NWin
CASE 0:
K$ = "OC": MsgBox K$, "退出", " 确定想离开吗?"
QBCancel = (K$ = "C")
END SELECT
END SUB
SUB C.FrameClick (NWin, Inx, Button)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.FrameDblClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.FrameMouseInOut (NWin, Inx, State)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0, 1:
SetMouseCursor State * 3
END SELECT
END SUB
SUB C.FrameMouseState (NWin, Inx, X, Y, Button)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
IF Button = 2 THEN DisplayMenu 2, -1, 0: Frame(0).GF = 0
END SELECT
END SUB
SUB C.ListChange (NWin, Inx, CType)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0, 1:
END SELECT
END SUB
SUB C.ListClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.ListDblClick (NWin, Inx)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.ListKeyPress (NWin, Inx, KeyCode)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
IF KeyCode = 45 THEN ListB(0).Loc = ListB(0).Loc - 1: ListB(0).RScInx = -2
IF KeyCode = 61 THEN ListB(0).Loc = ListB(0).Loc + 1: ListB(0).RScInx = -2
END SELECT
END SUB
SUB C.MenuClick (NWin, MInx, Inx)
Sel = NWin * 10000 + MInx * 100 + Inx
SELECT CASE Sel
CASE 1: PRINT "Welcome for you!": Menu(0, 1).Enabled = 0
CASE 2: Menu(1, 0).Enabled = NOT Menu(1, 0).Enabled
CASE 4:
ExitWin = 2
CASE 101: Menu(MInx, Inx).Value = NOT Menu(MInx, Inx).Value
CASE 103, 104: Menu(MInx, 3).Value = 0: Menu(MInx, 4).Value = 0
Menu(MInx, Inx).Value = 1
CASE 201 TO 210:
MouseHide
LINE (Win.X + Frame(0).X + 2, Win.Y + Frame(0).Y + 2)-STEP(Frame(0).W - 4, Frame(0).H - 4), Inx, BF
MouseShow
END SELECT
END SUB
SUB C.OptionClick (NWin, GInx, Inx)
Sel = NWin * 100 + GInx
SELECT CASE Sel
CASE 1:
ListB(0).Index = OptBValue(1)
END SELECT
END SUB
SUB C.TextKeyPress (NWin, Inx, KeyCode)
Sel = NWin * 100 + Inx
SELECT CASE Sel
CASE 0:
END SELECT
END SUB
SUB C.Timer (NWin, KeyCode)
SELECT CASE NWin
CASE 0:
SHARED PercentV AS SINGLE, PassKey
IF PassKey = 6 THEN
PercentV = PercentV + .0001
ELSEIF PassKey = 5 THEN
PercentV = PercentV - .0001
END IF
IF PercentV < .0001 OR PercentV >= 1 THEN PassKey = 0
ShowPercentbar 0, PercentV, PercentBar(), Win
OptB(1, 1).Enabled = Check(1).Value
Text(0).Enabled = Menu(1, 1).Value
Combo(0).Enabled = Menu(1, 3).Value = 1
END SELECT
''LOCATE 1, 1: PRINT Mouse.X - Win.X; Mouse.Y - Win.Y
''LOCATE 1, 1: PRINT FRE(-1)
END SUB
SUB DisplayMenu (MenuNo, X, Y)
SHARED XMenu, ContObj
XMenu = MenuN ContObj = -1
IF X >= 0 THEN Mouse.X = X: Mouse.Y = Y
END SUB
SUB ListAdd (Inx, InsNo, Item$)
XListAdd Inx, InsNo, Item$, ListB(), ListI(), MaxListItem
END SUB
SUB ListRemove (Inx, RemNo)
XListRemove Inx, RemNo, ListB(), ListI(), MaxListItem
END SUB
SUB LoadButton (Cmd)
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumButton = SumButton + 1
B = SumButton
Button(B).X = VAL(T$)
READ Button(B).Y, Button(B).W, Button(B).H, Button(B).Enabled
READ Button(B).FC, Button(B).FW, Button(B).FH, Button(B).Hotkey, ButtonCap(B)
IF Cmd THEN Get3DCmd Win.X + Button(B).X - 2, Win.Y + Button(B).Y - 2, Button(B).W + 4, Button(B).H + 4, -1, Cmd, Win
LOOP
END SUB
SUB LoadCheck
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumCheck = SumCheck + 1
B = SumCheck
Check(B).X = VAL(T$)
READ Check(B).Y, Check(B).Enabled
READ Check(B).Value, Check(B).Hotkey, CheckCap(B)
LOOP
END SUB
SUB LoadCombo
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumCombo = SumCombo + 1
B = SumCombo
Combo(B).X = VAL(T$)
L = B + SumList + 1
READ Combo(B).Y, Combo(B).BW, Combo(B).Col, Combo(B).Enabled, HK, Combo(B).G3D
ListB(L).Hotkey = HK
ListB(L).Count = -1: ListB(L).Index = -1
LOOP
END SUB
SUB LoadFrame (Memo)
DO
READ T$: IF T$ = "=" THEN EXIT DO
X = VAL(T$)
READ Y, W, H, FC, FM, BC, Mode, C$
IF Memo THEN
SumFrame = SumFrame + 1
B = SumFrame
Frame(B).X = X: Frame(B).Y = Y
Frame(B).W = W: Frame(B).H = H
END IF
PrintFrame X, Y, W, H, FC, FM, BC, Mode, C$, Win
LOOP
END SUB
SUB LoadLabel (Memo, Cmd)
DO
READ T$: IF T$ = "=" THEN EXIT DO
X = VAL(T$)
READ Y, BW, FW, FH, FC, BC, FM, ST, MSG$
Get3DCmd Win.X + X - 3, Win.Y + Y - 3, BW * 6 + 6 + (FW - 12) * BW, FH + 5, BC, Cmd, Win
IF Memo > 0 THEN
SumLabel = SumLabel + 1
B = SumLabel
Label(B).X = X: Label(B).Y = Y
Label(B).FW = FW: Label(B).FH = FH
Label(B).BW = BW: Label(B).FC = FC
Label(B).BC = BC: Label(B).FM = FM
Label(B).Style = ST: LabelCap(B) = MSG$
ELSE
S = 1: MN = -1
DO
E = INSTR(S, MSG$, "`")
EE = E
IF E = 0 THEN EE = LEN(MSG$) + 1
MN = MN + 1
PrintFont X, Y + MN * FH, FW, FH, FC, BC, FM, MID$(MSG$, S, EE - S), Win
S = E + 1
LOOP WHILE E > 0
END IF
LOOP
END SUB


回复

使用道具 举报

29#
发表于 2004-5-12 16:49:11 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

SUB LoadList
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumList = SumList + 1
B = SumList
ListB(B).X = VAL(T$)
READ ListB(B).Y, ListB(B).BW, ListB(B).Col, ListB(B).BH, ListB(B).Hotkey, ListB(B).G3D
ListB(B).Count = -1: ListB(B).Index = -1
LOOP
END SUB
SUB LoadMenu
DO
READ T$
IF T$ = "=" THEN EXIT DO
IF T$ = "-" THEN
SumMMenu = SumMMenu + 1: B = SumMMenu: A = 0
READ MenuHotkey(B), Menu(B, A).Enabled
ELSE
Menu(B, A).Enabled = VAL(T$)
END IF
READ Menu(B, A).Value, MenuCap(B, A)
SumMenu(B) = A: A = A + 1
LOOP
END SUB
SUB LoadOption
DO
READ T$
IF T$ = "=" THEN EXIT DO
IF T$ = "-" THEN
SumOptG = SumOptG + 1: B = SumOptG: A = 0
READ OptBValue(B), OptB(B, A).X
ELSE
OptB(B, A).X = VAL(T$)
END IF
READ OptB(B, A).Y, OptB(B, A).Enabled
READ OptB(B, A).Hotkey, OptBCap(B, A)
SumOptI(B) = A: A = A + 1
LOOP
END SUB
SUB LoadPercentBar
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumPercent = SumPercent + 1
B = SumPercent
PercentBar(B).X = VAL(T$)
READ PercentBar(B).Y, PercentBar(B).W, PercentBar(B).H
READ PercentBar(B).FC, PercentBar(B).BC, PercentBar(B).Style
ShowPercentbar B, 0, PercentBar(), Win
LOOP
END SUB
SUB LoadText
DO
READ T$: IF T$ = "=" THEN EXIT DO
SumText = SumText + 1
B = SumText
Text(B).X = VAL(T$)
READ Text(B).Y, Text(B).BW, Text(B).Enabled, Text(B).FC
READ Text(B).Password, Text(B).MaxLen, Text(B).Hotkey, Text(B).G3D
LOOP
END SUB
SUB LoadWindow (XX, YY, W, H, Font, BC, Box, TC, T$)
ERASE Button, OptB, SumOptI, Check, Frame, ListB, ListI, TextTXT, Text
ERASE ButtonCap, OptBCap, OptBRValue, OptBValue, CheckCap, Combo, ComboTXT
ERASE Label, LabelCap, LabelRCap
ERASE Menu, MenuCap, SumMenu, PercentBar
SumPercent = -1
SumButton = -1
SumCheck = -1
SumOptG = -1
SumFrame = -1
SumList = -1
SumText = -1
SumCombo = -1
SumLabel = -1
SumMMenu = -1
DrawWindow XX, YY, W, H, Font, BC, Box, TC, T$, Button(), ButtonCap(), Win, SumButton
RW = ASC(MID$(Win.RetWins, 1, 1))
RW = RW + 1
MID$(Win.RetWins, 1, 1) = CHR$(RW)
MID$(Win.RetWins, RW + 1, 1) = CHR$(Wins)
ExitWin = 0
END SUB
SUB MsgBox (KeyB$, Titl$, MSG$)
ON ERROR RESUME NEXT
SHARED MsgKey, ContObj
RW = Wins
IF LEFT$(KeyB$, 1) = "@" THEN
TWW = 39: H = 110
Wins = -2
SumText = SumText + 1
TextTXT(SumText) = MSG$: Text(SumText).Hotkey = 9
Text(SumText).Enabled = -1: Text(SumText).FC = 0
Text(SumText).MaxLen = VAL(MID$(KeyB$, 2)): Text(SumText).G3D = -1
Text(SumText).Locate = LEN(MSG$)
KeyB$ = "OC"
MSG$ = Titl$
Titl$ = ""
ELSE
IF Titl$ = "" THEN Titl$ = "信息"
Wins = -1
H = 90
END IF
S = 1: MN = -1
MS$ = ""
DO
E = INSTR(S, MSG$, "`")
EE = E
IF E = 0 THEN EE = LEN(MSG$) + 1'': IF EE - S = 0 THEN MN = -2
IF MN < 0 AND Wins = -2 AND Titl$ = "" THEN
Titl$ = MID$(MSG$, S, EE - S)
IF Titl$ = "" THEN Titl$ = "输入"
ELSE
MN = MN + 1
MS$ = MS$ + MKI$(S) + MKI$(EE - S)
END IF
IF EE - S > TWW THEN TWW = EE - S
S = E + 1
LOOP WHILE E > 0
TW = TWW * 6 + 30
KK = LEN(KeyB$)
H = H + 14 * MN: W = 90 + (KK - 1) * 70: IF TW > W THEN W = TW
RRXX = Win.X: RRYY = Win.Y: RRWW = Win.W: RRHH = Win.H: RRBC = Win.BC
X = -1: Y = -1
''X = Mouse.X: Y = Mouse.Y
''IF X + W > 639 THEN X = 639 - W
''IF Y + H > 450 THEN Y = 450 - H
RSButton = SumButton + 1
MouseHide
GetTX X, Y, W, H, 0
DrawWindow X, Y, W, H, 3, 7, 0, 1, CHR$(1) + Titl$, Button(), ButtonCap(), Win, SumButton
K = SumButton
FOR KA = 0 TO KK - 1
K$ = MID$(KeyB$, KA + 1, 1)
SELECT CASE UCASE$(K$)
CASE "O": C$ = "确定": HK = 13
CASE "Y": C$ = "是(Y)": HK = 277
CASE "N": C$ = "否(N)": HK = 305
CASE "A": C$ = "中断(A)": HK = 286
CASE "R": C$ = "重试(R)": HK = 275
CASE "I": C$ = "忽略(I)": HK = 279
CASE ELSE: C$ = "取消": HK = 27
END SELECT
K = K + 1: ButtonCap(K) = C$: Button(K).Hotkey = HK
Button(K).X = (W - KK * 68) \ 2 + 68 * KA
Button(K).Y = H - 52
Button(K).W = 60: Button(K).H = 17
Button(K).Enabled = 1: Button(K).FC = 0
Button(K).FW = 0: Button(K).FH = 12
NEXT
SumButton = K
FOR A = 0 TO MN
S = CVI(MID$(MS$, A * 4 + 1, 2))
E = CVI(MID$(MS$, A * 4 + 3, 2))
PrintChr Win.X + 10, Win.Y + 10 + 14 * A, 12, 12, 0, -1, MID$(MSG$, S, E)
NEXT
IF Wins = -2 THEN
Text(SumText).BW = TWW - 1
Text(SumText).X = 8
Text(SumText).Y = H - 83
MSG$ = TextTXT(SumText)
END IF
ExitWin = 0
MsgKey = RSButton
ProcessLoop
PutTX X, Y, 0
SumButton = RSButton - 1
Win.X = RRXX: Win.Y = RRYY: Win.W = RRWW: Win.H = RRHH: Win.BC = RRBC
KeyB$ = MID$(KeyB$, MsgKey, 1)
IF Wins = -2 THEN
SumText = SumText - 1: IF SumText > -1 THEN PrintText 0, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
IF MsgKey = 1 THEN MSG$ = TextTXT(SumText + 1)
END IF
MouseShow
MsgKey = 0: ContObj = 0
Wins = RW: ExitWin = 0
END SUB
SUB ProcessLoop
DIM PicTime AS SINGLE, InitTime AS SINGLE, RTimeClick AS SINGLE
SHARED XMenu, ContObj, MsgKey, RXInpT, KeyCode
RecWins = Wins
IF SumText > -1 AND RecWins <> -1 THEN ContObj = 3 ELSE ContObj = 0
LST = 0: LEND = SumList: XLLCMD = -1: InitControl = -1
IF RecWins = -2 THEN
XInpText = SumText
ELSE
XInpText = 0
END IF
RXInpT = XInpText
MouseShow
DO
IF ContObj <> -1 THEN GetMouse Mouse
KeyCode = 0
IF NOT InitControl THEN
GetKey KeyCode
C.Timer RecWins, KeyCode
END IF
RTextI = 0
IF ContObj <> 4 AND ContObj < 10 THEN
XRKCL = XKCL
XRLCMD = XXLCMD: A = 0
FOR XLCMD = MsgKey TO SumButton
IF Button(XLCMD).Enabled <> Button(XLCMD).REnabled OR InitControl AND XLCMD > RSButton THEN PrintButton XLCMD, InitControl - 2, Button(), ButtonCap(), Win: C.ButtonState RecWins, (XLCMD), 1
GotFocus xicmd, (Button(XLCMD).X), (Button(XLCMD).Y), (Button(XLCMD).W), (Button(XLCMD).H), Mouse, Win
HK = KeyCode = Button(XLCMD).Hotkey
IF (xicmd OR HK) AND Button(XLCMD).Enabled THEN
IF Mouse.K = 1 AND Mouse.RK = 0 OR Mouse.K = 1 AND XLLCMD = XLCMD OR HK THEN
IF A <> 2 THEN XLLCMD = XLCMD: IF HK THEN A = 2 ELSE XKCL = 2
ContObj = 7
ELSE
XKCL = -1
IF Mouse.K = 0 AND Mouse.RK = 1 THEN XKCL = 1
END IF
XXLCMD = XLCMD
IF A = 0 THEN A = 1
END IF
NEXT
IF XRLCMD <> XXLCMD OR A = 0 THEN
XKCL = 0
IF XRKCL = 2 THEN XKCL = 1
IF Mouse.K = 0 AND Mouse.RK = 1 THEN XLLCMD = -1
END IF
IF XKCL <> XRKCL THEN
PrintButton XRLCMD, XKCL, Button(), ButtonCap(), Win
C.ButtonState RecWins, (XRLCMD), (XKCL)
END IF
IF Mouse.K = 0 AND XLLCMD = XXLCMD AND Mouse.RK = 1 OR A = 2 THEN
IF RecWins < 0 THEN
Mouse.K = -99: RXInpT = 0: MsgKey = XLLCMD - MsgKey: ExitWin = 2
ELSE
C.ButtonClick RecWins, (XLLCMD)
IF MsgKey = XLLCMD THEN ExitWin = 2
END IF
END IF
''IF Mouse.K = 1 AND Mouse.RK = 0 THEN
'' GotFocus I, -5, -30, (Win.W), (Win.H), Mouse, Win
'' IF I = 0 THEN BEEP
''END IF
IF RecWins <> -1 THEN
IF RecWins = -2 THEN
RSText = SumText
IF RContObj = 3 AND ContObj <> 3 THEN PrintText XInpText, 3, 0, Text(), TextTXT(), Win, CutBoard, XPutII
RContObj = ContObj
ELSE
RSText = 0
END IF
FOR L = RSText TO SumText
IF InitControl THEN
PrintText L, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
IF L = SumText THEN PrintText XInpText, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
ELSE
X = Text(L).X: Y = Text(L).Y: W = (Text(L).BW) * 6 + 8
GotFocus I, X, Y + 1, W, 17, Mouse, Win
IF I THEN RTextI = 1
A = (KeyCode = Text(L).Hotkey)
IF I AND Mouse.K <> 0 AND Mouse.RK = 0 OR A THEN
PrintText RXInpT, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
IF A = 0 THEN Text(L).Locate = (Mouse.X - (Win.X + X) + 1) \ 6
XInpText = L: ContObj = 3
PrintText L, 4, 0, Text(), TextTXT(), Win, CutBoard, 0: RXInpT = XInpText
END IF
IF Text(L).Enabled <> Text(L).REnabled THEN
PrintText RXInpT, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
PrintText L, 5, 0, Text(), TextTXT(), Win, CutBoard, 0
RXInpT = L
END IF
END IF
NEXT
IF ContObj = 3 THEN
IF KeyCode <> 0 THEN
''IF KeyCode = 328 THEN XInpText = XInpText - 1: IF XInpText < RSText THEN XInpText = SumText
''IF KeyCode = 336 OR
IF KeyCode = 9 THEN XInpText = XInpText + 1: IF XInpText > SumText THEN XInpText = RSText
ELSE
IF TIMER - PicTime > .4 THEN XPutII = 0
IF TIMER - PicTime > .9 THEN XPutII = 1: PicTime = TIMER
END IF
IF RXInpT <> XInpText THEN
PrintText RXInpT, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
PrintText XInpText, 4, 0, Text(), TextTXT(), Win, CutBoard, 0
RXInpT = XInpText
ELSE
IF XPutII <> RXPutII OR KeyCode > 0 THEN
RXPutII = XPutII
PrintText XInpText, 2, KeyCode, Text(), TextTXT(), Win, CutBoard, XPutII
IF KeyCode <> 0 THEN C.TextKeyPress RecWins, XInpText, KeyCode
END IF
END IF
END IF
END IF
END IF
IF RRTextI <> RTextI THEN RRTextI = RTextI: SetMouseCursor RTextI
回复

使用道具 举报

30#
发表于 2004-5-12 16:50:18 | 只看该作者

想拥有自己的一键恢复吗?自己编写程序!(更新 附上源代码)

IF RecWins > -1 THEN
IF ContObj <> 4 THEN
II = 0
IF ContObj = 11 THEN
''IF Menu(XMenu, 0).Enabled THEN
XMenuHI = Menu(XMenu, 0).Enabled
IF XMenuHI > SumMenu(XMenu) THEN XMenuHI = SumMenu(XMenu)
MW = (SumMenu(XMenu) - 1) \ XMenuHI + 1
GotFocus II, RKMenuX + 2, RKMenuY - 3, MenuWidth * MW - 4, XMenuHI * 14 + 4, Mouse, Win
IF II AND (Mouse.Y <> XRMouseY OR Mouse.X <> XRMouseX) AND Mouse.Y > Win.Y + RKMenuY THEN
XMINX = ((Mouse.X - Win.X - RKMenuX - 1) \ MenuWidth) * XMenuHI + (Mouse.Y - Win.Y - RKMenuY - 1) \ 14 + 1
IF XMINX > SumMenu(XMenu) THEN XMINX = XRMINX
XRMouseY = Mouse.Y: XRMouseX = Mouse.X
END IF
IF II = 0 THEN IF Mouse.K = 1 THEN XMINX = 0
FOR A = 0 TO SumMenu(XMenu)
IF KeyCode = 336 THEN XMINX = XMINX + 1: IF XMINX > SumMenu(XMenu) THEN XMINX = 1
IF KeyCode = 328 THEN XMINX = XMINX - 1: IF XMINX < 1 THEN XMINX = SumMenu(XMenu)
IF MenuCap(XMenu, XMINX) <> "" THEN EXIT FOR
NEXT
IF KeyCode < 256 THEN
FOR A = 1 TO SumMenu(XMenu)
Cap$ = MenuCap(XMenu, A): L = INSTR(Cap$, "(")
Cap$ = UCASE$(MID$(Cap$, L + 1, 1))
IF Cap$ = UCASE$(CHR$(KeyCode)) THEN Mouse.K = 0: Mouse.RK = 1: XMINX = A: II = -1: EXIT FOR
NEXT
END IF
IF KeyCode = 13 THEN Mouse.K = 0: Mouse.RK = 1: II = -1
IF XMINX <> XRMINX THEN PrintMenu XMenu, XRMINX, XMINX, 4, Menu(), MenuCap(), SumMenu(), Win, RKSMenuX, RKSMenuY, RKMenuX, RKMenuY, MenuWidth: XRMINX = XMINX
IF Mouse.K = 0 AND Mouse.RK = 1 AND Menu(XMenu, XMINX).Enabled AND MenuCap(XMenu, XMINX) <> "" THEN IF XMINX > 0 THEN XPUT = 2 ELSE XPUT = 1
''END IF
IF (Mouse.K = 0 AND Mouse.RK > 0 OR RKSMenuX = -1 AND Mouse.K = 2 AND Mouse.RK = 0) AND II = 0 THEN XPUT = 1
PR = 0
IF KeyCode = 27 THEN XPUT = 1
IF RKSMenuX <> -1 THEN
IF KeyCode = 333 THEN XMenu = XMenu + 1: PR = -1: IF XMenu > SumMMenu THEN XMenu = 0
IF KeyCode = 331 THEN XMenu = XMenu - 1: PR = -1: IF XMenu < 0 THEN XMenu = SumMMenu
END IF
IF PR THEN XPUT = 2: XMINX = 0: ContObj = 10: XRMouseX = Mouse.X: XRMouseY = Mouse.Y
END IF
RKSMX = 0: RKSMY = -1
FOR M = 0 TO SumMMenu
IF M > 0 THEN
RKSMX = RKSMX + (LEN(MenuCap(M - 1, 0)) + 2) * 6 + 2
IF RKSMX + (LEN(MenuCap(M, 0)) + 2) * 6 + 2 > Win.W - 7 THEN RKSMX = 0: RKSMY = RKSMY + 14
END IF
GotFocus I, RKSMX - 1, RKSMY - 1, 6 * (LEN(MenuCap(M, 0)) + 2) + 2, 14, Mouse, Win
IF I AND II = 0 OR KeyCode = MenuHotkey(M) THEN
IF Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = MenuHotkey(M) OR XMenu <> M AND ContObj = 11 AND (Mouse.X <> XRMouseX OR Mouse.Y <> XRMouseY) THEN
IF ContObj = 11 THEN XPUT = 1
ContObj = 10: XMenu = M: XRMouseX = Mouse.X: XRMouseY = Mouse.Y
END IF
END IF
IF InitControl THEN
PrintMenu M, -1, -1, 0, Menu(), MenuCap(), SumMenu(), Win, RKSMX, RKSMY, RKMenuX, RKMenuY, MenuWidth
IF M = SumMMenu THEN MouseHide: Get3DBox (Win.X), (Win.Y) + RKSMY + 14, (Win.W) - 8, 1, 8, 15, -1: MouseShow
END IF
IF M = XMenu AND ContObj = 10 THEN RKSMenuX = RKSMX: RKSMenuY = RKSMY: RKMenuX = RKSMenuX - 1: RKMenuY = RKSMenuY + 16
NEXT
IF XPUT THEN
PrintMenu XRMenu, -1, -1, 3, Menu(), MenuCap(), SumMenu(), Win, RRKSMX, RRKSMY, RRKMX, RRKMY, RMW
IF XRMenu = XMenu THEN ContObj = 0
XRMenu = XMenu
IF XPUT = 2 THEN
C.MenuClick RecWins, XMenu, XMINX
ELSE
C.MenuClick -RecWins, -XMenu, 0
END IF
XPUT = 0: Mouse.K = -100: Mouse.RK = -100
RRTextI = 0: KeyCode = 0
END IF
IF ContObj = -1 THEN
SetMouseCursor 0: ContObj = 10
RKMenuY = Mouse.Y - Win.Y + 3
RKMenuX = Mouse.X - Win.X
RKSMenuX = -1
END IF
END IF
IF RContObj = 3 AND ContObj <> 3 THEN PrintText XInpText, 3, 0, Text(), TextTXT(), Win, CutBoard, XPutII
IF RContObj = 5 AND ContObj <> 5 THEN PrintCombo XCombo, 3, 0, Combo(), ComboTXT(), Win
RContObj = ContObj
IF ContObj = 10 THEN
C.MenuClick RecWins, XMenu, 0
PrintMenu XMenu, -1, 0, 1, Menu(), MenuCap(), SumMenu(), Win, RKSMenuX, RKSMenuY, RKMenuX, RKMenuY, MenuWidth
XRMenu = XMenu: XRMINX = 0: XMINX = 0
ContObj = 12
RRKSMX = RKSMenuX: RRKSMY = RKSMenuY
RRKMX = RKMenuX: RRKMY = RKMenuY: RMW = MenuWidth
END IF
IF ContObj = 12 AND Mouse.K = 0 AND Mouse.RK = 0 THEN ContObj = 11
IF ContObj < 10 THEN
IF (ContObj = 2 OR ContObj = 4) AND KeyCode > 0 THEN
I = ListB(XList).Index: S = ListB(XList).ScInx
B = S + ListB(XList).BH * ListB(XList).Col
IF KeyCode = 331 AND I > ListB(XList).BH - 1 THEN I = I - ListB(XList).BH: IF I < S THEN S = S - ListB(XList).BH
IF KeyCode = 333 AND I < ListB(XList).Count - ListB(XList).BH + 1 THEN I = I + ListB(XList).BH: IF I > B - 1 THEN S = S + ListB(XList).BH
IF KeyCode = 328 AND I > 0 THEN I = I - 1: IF I < S OR ListB(XList).BW <= 0 THEN IF ListB(XList).Col > 1 THEN S = S - ListB(XList).BH ELSE S = S - 1: I = S
IF KeyCode = 336 AND I < ListB(XList).Count THEN
I = I + 1
IF I > B - 1 OR ListB(XList).BW <= 0 THEN IF ListB(XList).Col > 1 THEN S = S + ListB(XList).BH ELSE S = S + 1: I = B
END IF
IF ContObj = 4 THEN
IF KeyCode = 13 THEN XComExit = 2: KeyCode = 0
IF KeyCode = 27 THEN XComExit = 1: KeyCode = 0
END IF
ListB(XList).Index = I: ListB(XList).ScInx = S
IF I > -1 THEN C.ListKeyPress RecWins, XList, KeyCode
END IF
RXL = XXL: XXX = 0
FOR XL = LST TO LEND
IF InitControl OR ContObj = -9 THEN
PrintList XL, -1, 1, 0, -2, ListB(), ListI(), Win: IF ContObj = -9 THEN ContObj = 4
ELSE
X = ListB(XL).X + 2: Y = ListB(XL).Y + 2: W = (ListB(XL).BW * ListB(XL).Col) * 6 + ListB(XL).Col * 3: H = ListB(XL).BH * 14 + 1
GotFocus XILIT, X, Y, W + 18, H, Mouse, Win
IF RXL <> XL AND PK AND XILIT THEN ListB(XXL).RCount = -2
IF (XILIT OR KeyCode = ListB(XL).Hotkey) AND ListB(XL).Count >= 0 AND XXX = 0 THEN
IF (Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = ListB(XL).Hotkey) AND ContObj <> 4 THEN ContObj = 2: XList = XL
GotFocus XLIL, X + W, Y, 18, H, Mouse, Win
MY = Mouse.Y - (Win.Y + Y)
MX = Mouse.X - (Win.X + X)
IF XLIL THEN
XSYY = -1
XMS = ListB(XL).Count - ListB(XL).BH * ListB(XL).Col + 1
IF XMS > 0 THEN
IF Mouse.K <> 1 AND Mouse.RK <> Mouse.K THEN PK = 0: MCNT = 0: NK = RNK: PR = 1: EXIT FOR
IF Mouse.K = 1 AND Mouse.RK = 0 THEN
NK = 5: PK = 1
IF MY < 16 THEN NK = 2 ELSE IF MY > H - 14 THEN NK = 3
PR = 1: RTimeClick = TIMER: InitTime = .4
RNK = NK
END IF
END IF
ELSE
IF RNK <> 0 AND Mouse.K <> 1 THEN RXL = XL: PK = 0: MCNT = 0: NK = 4: PR = 1: XSYY = -1: RNK = 0
IF Mouse.K <> 0 AND Mouse.RK = 0 OR ContObj = 4 AND (XRMouseY <> Mouse.Y OR XRMouseX <> Mouse.X) THEN
IL = (MY - 1) \ 14: JL = (MX - 1) \ (ListB(XL).BW * 6 + 3)
IL = ListB(XL).ScInx + JL * ListB(XL).BH + IL
IF IL > ListB(XL).Count THEN IL = -1
ListB(XL).Index = IL: XRMouseY = Mouse.Y: XRMouseX = Mouse.X
END IF
IF Mouse.K = 1 AND Mouse.RK = 0 THEN
IF ContObj = 4 THEN
XComExit = 2
ELSE
IF Mouse.DC AND IL > -1 THEN C.ListDblClick RecWins, XL
END IF
END IF
END IF
MCNT = 0
IF Mouse.K = 1 AND (TIMER - RTimeClick > InitTime AND (RNK = 2 OR RNK = 3) OR RNK = 5) THEN MCNT = 1: RTimeClick = TIMER: InitTime = ListScrollSpeed / 10
IF Mouse.K = 1 AND Mouse.RK = 0 OR MCNT THEN
S = ListB(XL).ScInx
IF RNK = 2 AND S > 0 THEN S = S - 1
IF RNK = 5 THEN
XSYY = MY - 15
IF XSYY < 0 THEN XSYY = 0
IF XSYY <> XRY THEN PR = 1: XRY = XSYY
END IF
IF RNK = 3 AND S < XMS + -(ListB(XL).Col > 1) * (ListB(XL).BH - ListB(XL).Count MOD ListB(XL).BH - 1) THEN S = S + 1
ListB(XL).ScInx = S
END IF
XXL = XL: XXX = 1
ELSE
IF RNK <> 0 THEN PK = 1
END IF
XPR = -1: XI = -1
B = ListB(XL).Index <> ListB(XL).RIndex
IF ListB(XL).Count <> ListB(XL).RCount THEN
XPR = 4
ELSEIF ListB(XL).ScInx <> ListB(XL).RScInx THEN
XPR = 5
ELSEIF B THEN
XI = ListB(XL).RIndex
XPR = 0
END IF
IF XPR > -1 THEN PrintList XL, XI, XPR, 0, -1, ListB(), ListI(), Win: A = ListB(XL).RIndex: ListB(XL).RIndex = XI: C.ListChange RecWins, XL, XPR: ListB(XL).RIndex = A
IF B AND ListB(XL).Index > -1 THEN C.ListClick RecWins, XL
END IF
NEXT
IF XXX = 0 AND PK THEN PR = 1: PK = 0: NK = RNK: XRY = -1: MCNT = 0: RNK = 0
IF PR AND RXL <= LEND THEN
RScInx = ListB(RXL).ScInx
PrintList RXL, -2, NK, PK, XSYY, ListB(), ListI(), Win: PR = 0
IF RScInx <> ListB(RXL).ScInx THEN C.ListChange RecWins, RXL, 9
END IF
IF XXX = 0 AND ContObj = 4 AND Mouse.K = 1 AND Mouse.RK = 0 THEN XComExit = 1
IF XComExit AND Mouse.K = 0 THEN
IF XComExit = 1 OR ListB(LEND).Index < 0 THEN ListB(LEND).Index = XComIndex: XComExit = 0
IF XComExit = 2 THEN SetCombo XCombo, (ListB(LEND).Index)
ContObj = 5: Mouse.RK = 0
MouseHide
PutTX Win.X + Combo(XCombo).X, XCOMY, 0
MouseShow
PrintCombo XCombo, 4, 0, Combo(), ComboTXT(), Win
IF XComExit = 2 THEN C.ComboClick RecWins, XCombo
XComExit = 0
LST = 0: LEND = SumList
END IF
IF ContObj <> 4 THEN
FOR T = 0 TO SumLabel
IF LabelCap(T) <> LabelRCap(T) OR InitControl THEN PrintLabel T, Label(), LabelCap(), LabelRCap(), Win
NEXT
FOR T = 0 TO SumOptG
FOR L = 0 TO SumOptI(T)
IF OptB(T, L).Enabled <> OptB(T, L).REnabled OR InitControl THEN PrintOption T, L, 11, OptB(), OptBRValue(), OptBValue(), OptBCap(), Win, SumOptI()
GotFocus I, (OptB(T, L).X), (OptB(T, L).Y), LEN(OptBCap(T, L)) * 6 + 16, 12, Mouse, Win
IF (I AND Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = OptB(T, L).Hotkey) AND OptB(T, L).Enabled THEN
OptBValue(T) = L
ContObj = 1
END IF
NEXT
IF OptBValue(T) <> OptBRValue(T) THEN
PrintOption T, -1, 0, OptB(), OptBRValue(), OptBValue(), OptBCap(), Win, SumOptI()
C.OptionClick RecWins, T, (OptBValue(T))
END IF
NEXT
FOR L = 0 TO SumCheck
IF Check(L).Enabled <> Check(L).REnabled OR InitControl THEN PrintCheck L, 11, Check(), CheckCap(), Win
GotFocus I, (Check(L).X), (Check(L).Y), LEN(CheckCap(L)) * 6 + 16, 12, Mouse, Win
IF (I AND Mouse.RK = 1 AND Mouse.K = 0 OR KeyCode = Check(L).Hotkey) AND Check(L).Enabled THEN
Check(L).Value = NOT Check(L).Value
ContObj = 6
END IF
IF Check(L).Value <> Check(L).RValue THEN
PrintCheck L, 0, Check(), CheckCap(), Win
C.CheckClick RecWins, L
END IF
NEXT
FOR A = 0 TO SumFrame
GotFocus I, (Frame(A).X), (Frame(A).Y), (Frame(A).W), (Frame(A).H), Mouse, Win
IF I THEN
IF Frame(A).GF = 0 THEN Frame(A).GF = -1: C.FrameMouseInOut RecWins, A, 1
IF Mouse.X <> Mouse.RX OR Mouse.Y <> Mouse.RY OR Mouse.K <> 0 OR Mouse.RK <> Mouse.K THEN C.FrameMouseState RecWins, A, (Mouse.X - Win.X - Frame(A).X), (Mouse.Y - Win.Y - Frame(A).Y), (Mouse.K)
IF Mouse.DC THEN
C.FrameDblClick RecWins, A
ELSEIF Mouse.K = 0 AND Mouse.RK <> 0 THEN
C.FrameClick RecWins, A, (Mouse.RK)
END IF
''EXIT FOR
ELSE
IF Frame(A).GF THEN Frame(A).GF = 0: C.FrameMouseInOut RecWins, A, 0
END IF
NEXT
FOR XLCOM = 0 TO SumCombo
IF Combo(XLCOM).Enabled <> Combo(XLCOM).REnabled OR InitControl THEN PrintCombo XLCOM, 1, 0, Combo(), ComboTXT(), Win
X = Combo(XLCOM).X: Y = Combo(XLCOM).Y: W = (Combo(XLCOM).BW) * 6
IF Combo(XLCOM).G3D > 0 THEN A = 1 ELSE A = 0
GotFocus I, X + A * (W + 7), Y + 1, (1 - A) * W + 23 - A * 5, 21, Mouse, Win
IF (I AND Mouse.K = 1 AND Mouse.RK = 0 OR KeyCode = ListB(SumList + XLCOM + 1).Hotkey) AND Combo(XLCOM).Enabled THEN
PrintCombo XCombo, 3, 0, Combo(), ComboTXT(), Win
MouseHide
GetTX Win.X + X, XCOMY, W + 25, H - 22, 0
MouseShow
PrintCombo XLCOM, 2, 1, Combo(), ComboTXT(), Win
ContObj = -9: XCombo = XLCOM
A = SumList + XLCOM + 1: XList = A
ListB(A).BH = ListB(A).Count + 1: IF ListB(A).BH > 8 THEN ListB(A).BH = 8
IF ListB(A).BH < 2 THEN ListB(A).BH = 1
LST = A: LEND = A: XComIndex = ListB(A).Index
H = ListB(A).BH * 14 + 2
B = Combo(XLCOM).G3D <> 0
XCOMY = Win.Y + Y + 18 - B
IF XCOMY + H > 455 THEN XCOMY = XCOMY - H - 20 + B * 2
ListB(A).BW = Combo(XCombo).BW
ListB(A).Col = (ListB(A).Count \ ListB(A).BH) + 1
IF ListB(A).Col > Combo(XLCOM).Col THEN ListB(A).Col = Combo(XLCOM).Col
B = ListB(A).BW * ListB(A).Col * 6 + 20 + (ListB(A).Col - 1) * 3
ListB(A).X = Combo(XCombo).X
IF ListB(A).X + B + Win.X + 3 > 640 THEN ListB(A).X = 640 - B - Win.X - 3
ListB(A).Y = XCOMY - Win.Y
IF RContObj = 3 THEN PrintText XInpText, 3, 0, Text(), TextTXT(), Win, CutBoard, 1
MouseHide
DrawBackBlock Win.X + ListB(A).X, Win.Y + ListB(A).Y, B, H, 5
MouseShow
C.ComboClick RecWins, -XCombo - 1
END IF
NEXT
END IF
END IF
END IF
InitControl = 0
IF ExitWin THEN
IF RecWins < 0 THEN EXIT DO
A = 0
C.FormUnload RecWins, A
IF A = 0 THEN
IF Wins = RecWins THEN
B = ASC(MID$(Win.RetWins, 1, 1))
IF B <= 1 THEN UnLoadMe
Wins = ASC(MID$(Win.RetWins, B, 1))
B = B - 2
IF B < 0 THEN B = 0
MID$(Win.RetWins, 1, 1) = CHR$(B)
END IF
EXIT DO
ELSE
ExitWin = 0: Wins = RecWins
END IF
END IF
LOOP
MouseHide
END SUB
SUB SetCombo (Inx, InxNo)
A = Inx + SumList + 1
ListB(A).Index = InxNo
IF InxNo < 0 THEN ComboTXT(Inx) = "" ELSE ComboTXT(Inx) = ListI(A, InxNo)
Combo(Inx).REnabled = 2
END SUB
超级经典的示例!!
大家可以分析分析此示例程序,
抛砖引玉
呵呵~
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 08:47

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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