主题:basic中显示汉字的方法
qb_liu
[专家分:70] 发布于 2010-01-04 14:19:00
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
最后更新于:2010-12-07 10:40:00
回复列表 (共9个回复)
沙发
qb_liu [专家分:70] 发布于 2010-01-04 14:23:00
自己又坐个沙发。。。
此程序是在blitzbasic下运行的。要下载的可以到兴趣小组中找下载地址。。。
此程序需要自己建立一个文件名为mydata.txt的文本文件。内容自己填写就行,至少要两行。
此程序需要用到点阵汉字库hzk.fnt附件就可下载,也可通过网络自己下载,再可用ucdos中汉字库。
另,此程序只需简单修改便可用在qbasic中,因为这本来就是我从qbasic中改过来的,呵呵。(佩服下自己。)
希望大家能广泛提供些在程序显示汉字的方法。。。。
板凳
905482852 [专家分:380] 发布于 2010-02-21 13:02:00
在qb中写汉字必须用qb汉字版
3 楼
wh030109035 [专家分:0] 发布于 2010-03-30 08:37:00
这个附件下载下来之后怎么用呢?我用的是QB7.0的。初学着,(*^__^*) 嘻嘻
4 楼
hyfjy [专家分:30] 发布于 2010-05-23 19:59:00
根据我的实践,要在QB中输出汉字只要用记事本编程,全部用半角,也就是所有标点符号全用半角格式,只在输入汉字时用全角,要打印输出时要用半角的引号,最后把记事本的格式改为“.BAS”,再用QB打开,就可以直接输出汉字了。这可是花了相当的时间才找到的好办法。使得输出文件中想要什么汉字就会自动输出什么汉字或其他QB本身认不识的字,如希腊字母,或其他文字了。
5 楼
hyfjy [专家分:30] 发布于 2010-05-23 20:05:00
如下有一程序,是计算内齿轮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 楼
hyfjy [专家分:30] 发布于 2010-05-23 20:17:00
下面是一个例子:
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 楼
hyfjy [专家分:30] 发布于 2010-05-23 20:19:00
下面是一段计算内齿轮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 楼
hyfjy [专家分:30] 发布于 2010-05-23 20:53:00
对不起,操作了几次都没反映,只能重输入,结果后来出了一堆,真的对不起了。
回想几年前我也在到处找汉字的输入输出法,最后找到了这个方法。
9 楼
phile [专家分:2310] 发布于 2010-06-23 14:52:00
有意思
我来回复