回 帖 发 新 帖 刷新版面

主题:关于 启动时用 QB/L

qb45的帖子中提到了"启动时用 QB/L" [url]http://www.programfan.com/club/showbbs.asp?id=20553[/url]

我用的时候遇到了一些问题,不过现在解决拉

qb4.5的默认目录为E:\qb\qb45,先进入该目录
新建一 记事本 文件,把qb45的程序粘贴进记事本,另存为 mouse.bas 所有文件

再新建一 记事本 文件,输入cmd。另存为 dd.bat , 所有文件。
(说明:也可输入start cmd,另外 文件名可取任意名字,但不能取为cmd.bat,否则会引起死循环...)
双击这个bat文件,进入cmd,显示如下:

E:\qb\qb45>cmd
Microsoft Windows 2000 [Version 5.00.2195]
(C) 版权所有 1985-2000 Microsoft Corp.

E:\qb\qb45>

输入如下:E:\qb\qb45>qb/l
以打开qb4.5

再用ALT+F,ALT+O打开mouse.bas,按F5运行程序,
遗憾的是看不到鼠标


方法二:
新建一 记事本 文件,把qb45的程序粘贴进记事本,另存为 mouse.bas 所有文件.
再新建一 记事本 文件,输入如下内容:
@echo off
cd E:\qb\qb45
qb mouse.bas /l
echo.
另存为 startqb.bat ,所有文件。
双击这个批处理文件,即可打开QB

回复列表 (共6个回复)

沙发

这个程序借用了qb45的Mouse (m1%, m2%, m3%, m4%)
'$INCLUDE: 'qb.bi'
DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
DECLARE SUB drawwin (l%, t%, w%, h%, class$)
DECLARE SUB putletters (x%, y%, letters$, colour$)
DECLARE SUB putmouse ()
DECLARE SUB loadmouse ()
DECLARE SUB loadletters ()
DECLARE SUB loadpalettes ()

DIM SHARED mouseshape$, mouseshapew(100), mouseshapeb(100), bkground(100), cx%, dx%
DIM SHARED fonw(1 TO 1880), fonb(1 TO 1880)
SCREEN 12: CLS
CALL loadpalettes
CALL loadletters
CALL loadmouse
LINE (0, 0)-(639, 479), 6, BF
CALL drawwin(50, 50, 300, 300, "Window")
CALL putletters(55, 55, "Windows", "white")
CALL drawwin(100, 100, 200, 30, "Text")
CALL drawwin(200, 200, 50, 30, "Buttom")
CALL putletters(215, 210, "YES", "black")

DO
  timenow$ = TIME$
  CALL putletters(160, 108, timenow$, "black")
  tim = TIMER + 1
  WHILE TIMER < tim
    CALL putmouse
  WEND
  CALL putletters(160, 108, timenow$, "white")
LOOP

SUB drawwin (l%, t%, w%, h%, class$)
SELECT CASE class$
  CASE "Window", "Buttom"
    color1% = 6: color2% = 15: color3% = 7: color4% = 6: color5% = 8: color6% = 0
  CASE "ButtomGetFocus"
    color1% = 0: color2% = 15: color3% = 7: color4% = 6: color5% = 8: color6% = 0
  CASE "ButtomPress"
    color1% = 6: color2% = 0: color3% = 8: color4% = 6: color5% = 8: color6% = 0
  CASE "Text"
    color1% = 6: color2% = 8: color3% = 0: color4% = 15: color5% = 7: color6% = 15
  CASE ELSE
END SELECT

LINE (l% - 1, t% - 1)-STEP(w% + 1, h% + 1), color1%, B
LINE (l%, t%)-STEP(w% - 1, h% - 1), color6%, B
LINE (l% + 1, t% + 1)-STEP(w% - 3, h% - 3), color5%, B
LINE (l% + 2, t% + 2)-STEP(w% - 5, h% - 5), color4%, BF
PSET (l%, t%)
DRAW "c" + STR$(color2%) + "nd" + STR$(h% - 1) + "nr" + STR$(w% - 1) + "bm+1,+1"
DRAW "c" + STR$(color3%) + "nd" + STR$(h% - 3) + "r" + STR$(w% - 3)
IF class$ = "Window" THEN
  LINE (l% + 2, t% + 2)-STEP(w% - 5, 20), 1, BF
END IF
END SUB

SUB loadletters
DIM letter(1 TO 20)
FOR i = 0 TO 93
  LOCATE 1, 1: PRINT CHR$(i + 32)
  GET (0, 0)-STEP(7, 15), letter
  FOR j = 1 TO 20
    fonw(20 * i + j) = letter(j)
  NEXT j
  LINE (8, 0)-STEP(7, 15), 15, BF
  PUT (8, 0), letter, XOR
  GET (8, 0)-STEP(7, 15), letter
  FOR j = 1 TO 20
    fonb(20 * i + j) = letter(j)
  NEXT j
NEXT i
LOCATE 1, 1: PRINT " "
END SUB

SUB loadmouse
  mouseshape1$ = "c8 m+12,+10 m-6,0 m+5,+10 m-2,+1 m-5,-10 m-4,+4 m+0,-15bm+2,+5p7,8bm-2,-5"
  mouseshape2$ = "c8 m+12,+10c7 m-6,0c8 m+5,+10 m-2,+1c15 m-5,-10c8 m-4,+4c15 m+0,-15"
  
  LINE (1, 1)-(15, 25), 15, BF
  PSET (2, 2): DRAW mouseshape1$ + mouseshape2$
  GET (2, 2)-STEP(12, 21), mouseshapew           ''取白色背景上的鼠标
  LINE (15, 1)-(30, 25), 0, BF
  PSET (16, 2): DRAW mouseshape1$ + mouseshape2$
  GET (16, 2)-STEP(12, 21), mouseshapeb          ''取黑色背景上的鼠标

  cx% = 1: dx% = 1
  GET (cx%, dx%)-STEP(12, 21), bkground
  oldx = cx%: oldy = dx%
END SUB

SUB loadpalettes
  PALETTE 0, 0 * (1 + 256 + 65536)
  PALETTE 6, 44 * (1 + 256 + 65536)
  PALETTE 7, 52 * (1 + 256 + 65536)
  PALETTE 8, 28 * (1 + 256 + 65536)
  PALETTE 15, 63 * (1 + 256 + 65536)
END SUB

SUB Mouse (m1%, m2%, m3%, m4%)
''鼠标调用的子程序
    DIM inreg  AS RegType, outreg AS RegType
    inreg.ax = m1%
    inreg.bx = m2%
    inreg.cx = m3%
    inreg.dx = m4%
    INTERRUPT &H33, inreg, outreg
    m1% = outreg.ax
    m2% = outreg.bx
    m3% = outreg.cx
    m4% = outreg.dx
END SUB

SUB putletters (x%, y%, letters$, colour$)
REM colour$: white black
DIM letter(1 TO 20), bg(1 TO 20)
LettersLen = LEN(letters$)
FOR i = 1 TO LettersLen
  LAsc = ASC(MID$(letters$, i, 1)) - 32
  IF colour$ = "white" THEN
    FOR j = 1 TO 20
      letter(j) = fonw(20 * LAsc + j)
    NEXT j
    PUT (x% + 8 * i - 8, y%), letter, OR
  ELSEIF colour$ = "black" THEN
    FOR j = 1 TO 20
      letter(j) = fonb(20 * LAsc + j)
    NEXT j
    PUT (x% + 8 * i - 8, y%), letter, AND
  END IF
NEXT i
END SUB

SUB putmouse STATIC
  CALL Mouse(3, bx%, cx%, dx%)
  SELECT CASE bx%
   CASE 0
    lb% = 0: RB% = 0
   CASE 1
    lb% = -1: RB% = 0
   CASE 2
    lb% = 0: RB% = -1
   CASE 3
    lb% = -1: RB% = -1
  END SELECT

  IF cx% < 10 THEN cx% = 10
  IF dx% < 10 THEN dx% = 10
  IF cx% > 627 THEN cx% = 627
  IF dx% > 458 THEN dx% = 458

  IF oldx <> cx% OR oldy <> dx% THEN
    PUT (oldx, oldy), bkground, PSET
    GET (cx%, dx%)-STEP(12, 21), bkground
    PUT (cx%, dx%), mouseshapew, AND
    PUT (cx%, dx%), mouseshapeb, OR
    oldx = cx%: oldy = dx%
  END IF
END SUB

板凳

建议别用2000,用98好些
鼠标形状可以自己画,用GET  PUT来显示鼠标
在98下就不用这么麻烦了!

3 楼

也好,只是我能接触到的电脑好像都是Win2000或XP的,没办法

4 楼

飞鸟,我建议你经常到DOSQB这个论坛去看看,在编程资料区里有很多资料,比如有鼠标中断资料,长文件名中断资料,INT13详细调用、INT2F的详细调用资料、VESA显卡的调用资料,你写程序就可以来参考它,除了这些资料,还有我发的一些原程序比如 :关机、重启动、用端口清除逻辑锁、还原精灵.........模块发布区还有一些现成的函数调用.....

5 楼

[quote]也好,只是我能接触到的电脑好像都是Win2000或XP的,没办法[/quote]

XP也是可以的。。。

6 楼

给你的QB程序创建一个快捷方式,右击快捷方式——属性——命令行——在QB。EXE后面加上 /L,不用建批处理,进入QB后直接打开就可以了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册