回 帖 发 新 帖 刷新版面

主题:basic中显示汉字的方法

Graphics 800,600

Global filein

filein = ReadFile("mydata.txt")
Read1$ = ReadLine$( filein )

viewhz Read1,0,0

text1$ = ReadLine$( filein )
viewhz text1$,0,20
CloseFile( filein )

WaitKey
End


Function viewhz (Text1$, x, y)
HZK =OpenFile("hzk.fnt")
textl = Len(Text1$)

For xunhuan = 0 To textl - 1 Step 2
    z$ = Mid$(Text1$, xunhuan + 1, 2)
    qh = Asc(Mid$(z$, 1, 1)) - 160
    wh = Asc(Mid$(z$, 2, 1)) - 160
    qw = (94 * (qh - 1) + (wh - 1)) * 32
    If qw < 0 Then Goto nned
    SeekFile (HZK, qw )
    For j = 0 To 31
         yy = y + Int(j / 2)
        hzi = ReadByte( HZK )        
        If xx >= x + 16 Or xx = 0 Then xx = x
        
        xxxx=1
        For n = 7 To 0 Step -1
            nn=1 Shl n
            If hzi >= nn Then 
                Plot xx, yy
                hzi = hzi - nn
            End If
               xx = xx + 1
          Next 
    Next    
.nned
    x = x + 16
Next 
CloseFile(HZK)

End Function

以上是用blitzbasic编写通过的,但很多同学想要qbasic的代码,特此再发一份qbasic代码。
‘-----------------------------------------------------
SCREEN 12
hz1$ = "测试用点阵字显示方法"

viewhz 1, 100, hz1$, 11


REM 显示汉字的子程序,需要汉字库hzk.fnt
SUB viewhz (x0, y0, hz.word$, hzcol)
OPEN "hzk.fnt" FOR BINARY AS #1
IF LOF(1) = 0 THEN PRINT "没有汉字库! ":END

savex0 = x0: savey0 = y0
FOR now = 1 TO LEN(hz.word$)
    qu = ASC(MID$(hz.word$, now, 1))
    IF qu >= 161 THEN
         now = now + 1
         IF now > LEN(hz.word$) THEN EXIT FOR
         wei = ASC(MID$(hz.word$, now, 1))
         ps& = ((qu - 161) * 94& + wei - 161) * 32& + 1
         SEEK #1, ps&
         zimo$ = INPUT$(32, 1)
         num = 1
         FOR y = 0 TO 15
            chr1$ = MID$(zimo$, num, 1)
            num = num + 1
            chr2$ = MID$(zimo$, num, 1)
            num = num + 1
            chr3$ = chr2$ + chr1$
            LINE (x0, y0 + y)-STEP(15, 0), hzcol, , CVI(chr3$)
         NEXT y
         x0 = x0 + 16
    ELSE
      SEEK #2, qu * 16
      zimo$ = INPUT$(16, 2)
      FOR y = 1 TO 16
          zmchr$ = CHR$(0) + MID$(zimo$, y, 1)
          LINE (x0, y0 + y)-STEP(15, 0), hzcol, , CVI(zmchr$)
      NEXT y
      x0 = x0 + 8
   END IF
NEXT now
x0 = savex0: y0 = savey0
close #1
END SUB

回复列表 (共9个回复)

沙发

自己又坐个沙发。。。

此程序是在blitzbasic下运行的。要下载的可以到兴趣小组中找下载地址。。。

此程序需要自己建立一个文件名为mydata.txt的文本文件。内容自己填写就行,至少要两行。

此程序需要用到点阵汉字库hzk.fnt附件就可下载,也可通过网络自己下载,再可用ucdos中汉字库。

另,此程序只需简单修改便可用在qbasic中,因为这本来就是我从qbasic中改过来的,呵呵。(佩服下自己。)

希望大家能广泛提供些在程序显示汉字的方法。。。。

板凳

在qb中写汉字必须用qb汉字版

3 楼

这个附件下载下来之后怎么用呢?我用的是QB7.0的。初学着,(*^__^*) 嘻嘻

4 楼


根据我的实践,要在QB中输出汉字只要用记事本编程,全部用半角,也就是所有标点符号全用半角格式,只在输入汉字时用全角,要打印输出时要用半角的引号,最后把记事本的格式改为“.BAS”,再用QB打开,就可以直接输出汉字了。这可是花了相当的时间才找到的好办法。使得输出文件中想要什么汉字就会自动输出什么汉字或其他QB本身认不识的字,如希腊字母,或其他文字了。

5 楼


如下有一程序,是计算内齿轮M值的。用记事本记录后再把扩展名改成QB的格式就能在QB下运行且输出汉字哦。

OPEN "A.DOC" FOR OUTPUT AS #1
10 INPUT "M=   (MO SHU)"; M
PRINT #1, "从内齿轮公法线长度计算棒间距M值输出表"
PRINT #1,
PRINT #1, "输入模数:"; M
15 IF M = 0 THEN 230
20 INPUT "Z=   (CHI SHU)"; Z
PRINT #1, "输入齿数:"; Z
IF Z = 0 THEN PRINT #1, "输入齿数为零,程序结束.欢迎再次使用.": END
30 A = 20
40 PRINT "A="; A; "  (YA LI JIAO)"
50 INPUT "A="; A
IF A <= 0 THEN A = 20: PRINT #1, "系统默认压力角为20度": GOTO 60
PRINT #1, "输入压力角为:"; A
60 P = 3.14159265359#
65 Q = 180
70 A = A * P / Q
75 INPUT "Dp=   (LIANG  BANG  ZHI  JING)"; Dp
IF Dp = 0 THEN 75
PRINT #1, "输入量棒直径为:"; Dp
80 INPUT "K=  (KUA CHI SHU)"; K
IF K <= 1 THEN PRINT #1, "你输入的跨齿数为零,不能计算,请再次输入": PRINT "K=2,3,4...": GOTO 80
PRINT #1, "输入公法线跨齿数为:"; K
90 INPUT "W=   (GONG  FA  XIAN)"; W
PRINT #1, "输入公法线长度为:"; W
95 IF W = 0 THEN PRINT #1, "公法线长度为零,程序重新开始": GOTO 10
96 IF G > 10 THEN 110
100 DIM Y(20)
110 Y(1) = M * COS(A) * (P * (K - .5) + Z * (TAN(A) - A))
120 Y(2) = (W - Y(1)) / (2 * M * SIN(A))
PRINT #1, "对应变位系数 X 为:"; Y(2)
PRINT #1, "对应弧齿槽宽 S 为:"; M * P / 2 + 2 * Y(2) * M * TAN(A)
130 Y(3) = M * Z
140 Y(4) = (M * P / 2 + 2 * Y(2) * TAN(A) * M) / Y(3)
145 Y(5) = TAN(A) - A - Dp / Y(3) / COS(A) + Y(4)
146 IF Y(5) < 0 THEN 229
150 T = Y(5)
Q = .7
R = 0
160 S = TAN(Q) - Q - T
Q = Q - S / TAN(Q) ^ 2
IF R = S THEN 170
IF ABS(S) > 1E-09 THEN LET R = S: GOTO 160
170 Y(6) = Q
175 Q = 180
180 IF INT(Z / 2) * 2 <> Z THEN GOTO 200
190 Y(7) = M * Z * COS(A) / COS(Y(6)) - Dp
195 GOTO 210
200 Y(7) = M * Z * COS(A) / COS(Y(6)) * COS(90 / Z * P / Q) - Dp
210 PRINT #1, "与此公法线对应的M值为:"; Y(7)
PRINT "M="; Y(7)
220 GOTO 90
229 PRINT #1, "量棒直径选择错误,计算不能进行.程序结束,欢迎再次使用": GOTO 240
230 PRINT #1, "你输入的模数为零,程序结束.欢迎再次使用"
240 CLOSE #1
END



程序结束后输出一个“A.DOC”的文件,打开这个文件中记录的就是计算结果,是以汉字形式输出的。

6 楼


下面是一个例子:

OPEN "A.DOC" FOR OUTPUT AS #1
10 INPUT "M=   (MO SHU)"; M
PRINT #1, "从内齿轮公法线长度计算棒间距M值输出表"
PRINT #1,
PRINT #1, "输入模数:"; M
15 IF M = 0 THEN 230
20 INPUT "Z=   (CHI SHU)"; Z
PRINT #1, "输入齿数:"; Z
IF Z = 0 THEN PRINT #1, "输入齿数为零,程序结束.欢迎再次使用.": END
30 A = 20
40 PRINT "A="; A; "  (YA LI JIAO)"
50 INPUT "A="; A
IF A <= 0 THEN A = 20: PRINT #1, "系统默认压力角为20度": GOTO 60
PRINT #1, "输入压力角为:"; A
60 P = 3.14159265359#
65 Q = 180
70 A = A * P / Q
75 INPUT "Dp=   (LIANG  BANG  ZHI  JING)"; Dp
IF Dp = 0 THEN 75
PRINT #1, "输入量棒直径为:"; Dp
80 INPUT "K=  (KUA CHI SHU)"; K
IF K <= 1 THEN PRINT #1, "你输入的跨齿数为零,不能计算,请再次输入": PRINT "K=2,3,4...": GOTO 80
PRINT #1, "输入公法线跨齿数为:"; K
90 INPUT "W=   (GONG  FA  XIAN)"; W
PRINT #1, "输入公法线长度为:"; W
95 IF W = 0 THEN PRINT #1, "公法线长度为零,程序重新开始": GOTO 10
96 IF G > 10 THEN 110
100 DIM Y(20)
110 Y(1) = M * COS(A) * (P * (K - .5) + Z * (TAN(A) - A))
120 Y(2) = (W - Y(1)) / (2 * M * SIN(A))
PRINT #1, "对应变位系数 X 为:"; Y(2)
PRINT #1, "对应弧齿槽宽 S 为:"; M * P / 2 + 2 * Y(2) * M * TAN(A)
130 Y(3) = M * Z
140 Y(4) = (M * P / 2 + 2 * Y(2) * TAN(A) * M) / Y(3)
145 Y(5) = TAN(A) - A - Dp / Y(3) / COS(A) + Y(4)
146 IF Y(5) < 0 THEN 229
150 T = Y(5)
Q = .7
R = 0
160 S = TAN(Q) - Q - T
Q = Q - S / TAN(Q) ^ 2
IF R = S THEN 170
IF ABS(S) > 1E-09 THEN LET R = S: GOTO 160
170 Y(6) = Q
175 Q = 180
180 IF INT(Z / 2) * 2 <> Z THEN GOTO 200
190 Y(7) = M * Z * COS(A) / COS(Y(6)) - Dp
195 GOTO 210
200 Y(7) = M * Z * COS(A) / COS(Y(6)) * COS(90 / Z * P / Q) - Dp
210 PRINT #1, "与此公法线对应的M值为:"; Y(7)
PRINT "M="; Y(7)
220 GOTO 90
229 PRINT #1, "量棒直径选择错误,计算不能进行.程序结束,欢迎再次使用": GOTO 240
230 PRINT #1, "你输入的模数为零,程序结束.欢迎再次使用"
240 CLOSE #1
END


用记事本复制后再把扩展名改为“.BAS”就能运行了,最后输出“A.DOC”,是一个WORD格式文件,当中有汉字呢。这是一段计算内齿轮内M值的程序哦。

7 楼

下面是一段计算内齿轮M值的程序。用记事本复制后再把扩展名改为“.BAS”就可以在QB下运行了,最后输出的文件中有汉字呢。

OPEN "A.DOC" FOR OUTPUT AS #1
10 INPUT "M=   (MO SHU)"; M
PRINT #1, "从内齿轮公法线长度计算棒间距M值输出表"
PRINT #1,
PRINT #1, "输入模数:"; M
15 IF M = 0 THEN 230
20 INPUT "Z=   (CHI SHU)"; Z
PRINT #1, "输入齿数:"; Z
IF Z = 0 THEN PRINT #1, "输入齿数为零,程序结束.欢迎再次使用.": END
30 A = 20
40 PRINT "A="; A; "  (YA LI JIAO)"
50 INPUT "A="; A
IF A <= 0 THEN A = 20: PRINT #1, "系统默认压力角为20度": GOTO 60
PRINT #1, "输入压力角为:"; A
60 P = 3.14159265359#
65 Q = 180
70 A = A * P / Q
75 INPUT "Dp=   (LIANG  BANG  ZHI  JING)"; Dp
IF Dp = 0 THEN 75
PRINT #1, "输入量棒直径为:"; Dp
80 INPUT "K=  (KUA CHI SHU)"; K
IF K <= 1 THEN PRINT #1, "你输入的跨齿数为零,不能计算,请再次输入": PRINT "K=2,3,4...": GOTO 80
PRINT #1, "输入公法线跨齿数为:"; K
90 INPUT "W=   (GONG  FA  XIAN)"; W
PRINT #1, "输入公法线长度为:"; W
95 IF W = 0 THEN PRINT #1, "公法线长度为零,程序重新开始": GOTO 10
96 IF G > 10 THEN 110
100 DIM Y(20)
110 Y(1) = M * COS(A) * (P * (K - .5) + Z * (TAN(A) - A))
120 Y(2) = (W - Y(1)) / (2 * M * SIN(A))
PRINT #1, "对应变位系数 X 为:"; Y(2)
PRINT #1, "对应弧齿槽宽 S 为:"; M * P / 2 + 2 * Y(2) * M * TAN(A)
130 Y(3) = M * Z
140 Y(4) = (M * P / 2 + 2 * Y(2) * TAN(A) * M) / Y(3)
145 Y(5) = TAN(A) - A - Dp / Y(3) / COS(A) + Y(4)
146 IF Y(5) < 0 THEN 229
150 T = Y(5)
Q = .7
R = 0
160 S = TAN(Q) - Q - T
Q = Q - S / TAN(Q) ^ 2
IF R = S THEN 170
IF ABS(S) > 1E-09 THEN LET R = S: GOTO 160
170 Y(6) = Q
175 Q = 180
180 IF INT(Z / 2) * 2 <> Z THEN GOTO 200
190 Y(7) = M * Z * COS(A) / COS(Y(6)) - Dp
195 GOTO 210
200 Y(7) = M * Z * COS(A) / COS(Y(6)) * COS(90 / Z * P / Q) - Dp
210 PRINT #1, "与此公法线对应的M值为:"; Y(7)
PRINT "M="; Y(7)
220 GOTO 90
229 PRINT #1, "量棒直径选择错误,计算不能进行.程序结束,欢迎再次使用": GOTO 240
230 PRINT #1, "你输入的模数为零,程序结束.欢迎再次使用"
240 CLOSE #1
END

8 楼

对不起,操作了几次都没反映,只能重输入,结果后来出了一堆,真的对不起了。
回想几年前我也在到处找汉字的输入输出法,最后找到了这个方法。

9 楼

有意思

我来回复

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