?? visual basic6編程中的漢字處理 ----- 程序設計聯盟 - pgsun_com.htm
字號:
</P>
<P> VB6雖然提供了較強的位運算功能,但是對于在字模轉換中使用較多的移位操作,卻沒有提供對應的移位運算符、指令或函數。其實通過and(與)、or(或)二個位運算符即可編制一個自定義子函數來實現移位運算。
</P>
<P> 下面的自定義子函數就是實現循環右移的: <BR> Public Function byteRight(byte1
As Byte, n As Integer) <BR>As Byte '將byte1右移n位 <BR> Dim
TemVar As Byte '臨時變量 <BR> Dim TemVar1 As Byte '臨時變量 <BR> Dim
X, Y As Integer <BR> TemVar = byte1 <BR> For X = 1 To n
'移多少位就循環多少次 <BR> For Y = 1 To 8 '從第一位(右邊第一位)開始循環右移
<BR> Select Case Y <BR> Case 1 <BR> If (TemVar And &H1)
= &H1 Then '如果臨時變量TemVar的第一位是1, <BR> TemVar1 = &H1
'則將臨時變量TemVar1置1, <BR> Else <BR> TemVar1 = &H0
'則將臨時變量TemVar1置0, <BR> End If <BR> Case 2 <BR> If (TemVar
And &H2) = &H2 Then '如果臨時變量TemVar的第二位是1, <BR> TemVar
= TemVar Or &H1 '則將其第一位置1(其它位不變), <BR> Else<BR>TemVar =
TemVar And &HFE '反之將第一位置0(其它位不變) <BR> End If <BR> Case 3
<BR> If (TemVar And &H4) = &H4 Then '操作與上面相同
<BR> TemVar = TemVar Or &H2 <BR> Else <BR> TemVar =
TemVar And &HFD <BR> End If <BR> Case 4 <BR> If (TemVar
And &H8) = &H8 Then <BR> TemVar = TemVar Or &H4
<BR> Else <BR> TemVar = TemVar And &HFB <BR> End If
<BR> Case 5 <BR> If (TemVar And &H10) = &H10 Then
<BR> TemVar = TemVar Or &H8 <BR> Else <BR> TemVar =
TemVar And &HF7 <BR> End If <BR> Case 6 <BR> If (TemVar
And &H20) = &H20 Then <BR> TemVar = TemVar Or
&H10 <BR> Else <BR> TemVar = TemVar And &HEF
<BR> End If <BR> Case 7 <BR> If (TemVar And &H40) =
&H40 Then <BR> TemVar = TemVar Or &H20 <BR> Else
<BR> TemVar = TemVar And &HDF <BR> End If <BR> Case 8
<BR> If (TemVar And &H80) = &H80 Then <BR> TemVar =
TemVar Or &H40 <BR> Else <BR> TemVar = TemVar And
&HBF <BR> End If <BR> If TemVar1 = &H1 Then
'移完第八位后,如果TemVar1是1(即第一位是1) <BR> TemVar = TemVar Or &H80
'則將TemVar的第八位置1 <BR> Else <BR> TemVar = TemVar And &H7F
'反之置0 <BR> End If <BR> End Select <BR> Next Y <BR> Next X
<BR> byteRight = TemVar '將TemVar的值返回給函數名 <BR> End Function
<BR> 尤其需要注意的是當把二進制數據寫入文件中時,必須使用Byte數據類型的數組變量,而不是 String 變量。
<BR>String 被認為包含的是字符,而二進制型數據可能無法正確地存在 String 變量中。
<BR> 五、一個實際應用案例
<BR> 圖形點陣液晶在現代單片機系統中是一種十分常用的顯示設備,BP機、手機上的顯示屏就是圖形點陣液晶。它能顯示漢字和圖形,與行列式鍵盤組成了單片機系統中最常用的人機交互界面。但是直接從中文系統漢字字庫中提取的漢字字模并不能直接在液晶上顯示,通常都必須經過格式上的調整和轉換。
</P>
<P> 1、圖形點陣液晶的漢字字模
<BR> 與在西文DOS中顯示漢字不同的是,圖形點陣液晶并不是簡單地用畫點的方式來描出漢字。以常用的HD61202圖形點陣液晶顯示控制模塊為例,它能控制64×64點陣液晶的顯示,其顯示RAM共64行,分8頁,每頁8行,每一頁的數據寄存器分別對應液晶屏幕上的8行點,對顯示RAM的一個字節單位賦值就是對當前列的8行(一頁)的像素點是否顯示進行控制。連續16列和相鄰的2頁的32字節顯示RAM就可以控制一個漢字的顯示區域。對這些顯示RAM賦以相應的值就可以顯示出一個漢字。
</P>
<P> HD61202圖形點陣液晶顯示控制模塊的漢字字模的排列實際上是標準漢字字模排列形式旋轉而成的。對標準漢字字模轉換的目的就是在單片機系統的數據存儲器中(如E2PROM)存儲經過調整的連續32字節的16進制數。
</P>
<P> 2、實際源程序
<BR> 以下這段程序是放置在漢字源文本輸入框(SrcTxt)的Change事件中。通過判斷輸入在文本框內的字符的ASCII碼是否小于零,就能判斷輸入的字符是不是漢字。這段程序還能計算漢字字符串的長度。同時把輸入的漢字存儲在一個臨時文件TempSrc.txt中。由于這段代碼是放在文本框的Change事件中,它能立即更新漢字個數的顯示。
</P>
<P> Private Sub SrcTxt_Change( ) <BR> Static SStr As String
<BR> Dim i As Integer <BR> Dim TempFile, TempFileBinary As
String <BR> TotalNum = 0 <BR> L = Len(SrcTxt.Text) <BR> For
i = 1 To L <BR> tmpStr = StrConv(Mid$(SrcTxt.Text, i, 1),
vbWide) <BR> If Asc(Mid$(SrcTxt.Text, i, 1)) < 0 Then
<BR> TotalNum = TotalNum + 1 <BR> SStr = SrcTxt.Text
<BR> Else <BR> MsgBox "寫入的不是漢字!" <BR> SrcTxt.Text =
Left(SrcTxt.Text, Len(SrcTxt.Text) - 1) <BR> Exit Sub
<BR> End If <BR> Next i <BR> LblNum.Caption =
Str$(TotalNum) + "個漢字" <BR> TempFile = App.Path + "\" +
"TempSrc.txt" <BR> 'TempFileBinary = App.Path + "\" +
"TempSrcBinary.txt" </P>
<P> Open TempFile For Output As #1 <BR> Print #1,
SrcTxt.Text <BR> Close #1 <BR> End Sub <BR> 在實例中選用了UCDOS
5.0漢字系統中的16點陣字庫Hzk16作為提取漢字字模的標準字庫。 <BR> Private Sub
CmdCnt_Click( ) <BR> Dim TempSrcFile As String <BR> Dim
TempDestFile As String <BR> Dim TempFile As String <BR> Dim
HzFile As String <BR> Dim To61202(32) As Integer <BR> Dim
p(1 To 2) As Byte <BR> Dim C1, C2 <BR> Dim rec As Integer
<BR> Dim Location As Long '漢字在字庫中的位置 <BR> Dim Hz(0 To 31) As
Byte '轉換完的32字節的字模數據 <BR> Dim Buf1(0 To 31) As Byte
'暫存轉換過程中的32字節字模數據 <BR> Dim HzAll( ) As Byte '存放全部字模數據的動態數組
<BR> Dim LoopAll As Integer <BR> Dim bit, k2, k3 As Byte
<BR> Dim i, j, i1, k, k1, k4, k5, k6 As Integer
<BR> DestTxt.Text = "" 'DestTxt是目標文本框,存放轉換后的16進制數據 <BR> Flag
= 0 <BR> TempDestFile$ = App.Path + "\" + "TempDest.txt"
<BR> If FileExists(TempDestFile$) Then Kill TempDestFile
<BR>'FileExists是一個檢查文件是否存在的自定義函數 <BR> If SrcTxt.Text = ""
Then '漢字輸入框內無漢字則退出 <BR> MsgBox "沒有可以轉換的字模源文件!" <BR> Exit Sub
<BR> End If <BR> HzNum = Len(SrcTxt.Text) '獲得漢字的個數
<BR> ReDim HzAll(0 To HzNum * 32 - 1) '重新定義動態數組的上界 <BR> Open
TempFile For Output As #1 <BR> Print #1, SrcTxt.Text
<BR> Close #1 <BR> For LoopAll = 0 To HzNum - 1 <BR> Open
TempFile For Binary Access Read As #1 '按二進制方式打開 <BR> Get #1,
2 * LoopAll + 1, p <BR> Close #1 <BR> C1 = CStr(p(1)) -
&Ha1 '區內碼 <BR> C2 = CStr(p(2)) - &Ha1 '位內碼 <BR> rec
= C1 * 94 + C2 <BR> Location = CLng(rec) * 32 + 1
<BR>'該漢字在16*16點陣字庫中字模第一個字節的位置 <BR> HzFile = App.Path + "\" +
"hzk16" <BR> Open HzFile For Binary Access Read As #1
<BR>'讀取該漢字在16點陣字庫中的原始字模 <BR> Get #1, Location, Hz <BR> Close
#1 <BR> '以下是將UCDOS字庫的存儲格式調整為HD61202的規范格式 <BR> For j = 0 To 3
<BR> If j = 0 Then k4 = 14 <BR> If j = 1 Then k4 = 15
<BR> If j = 2 Then k4 = 30 <BR> If j = 3 Then k4 = 31
<BR> For k = 0 To 7 <BR> bit = &H80 <BR> bit =
byteRight((bit), (k)) <BR> For i = 0 To 7 <BR> k2 =
byteleft(Buf1(j * 8 + k), 1) <BR>'整個流程是由低位向高位移動,最后湊成一個字節
<BR> k3 = byteRight((Hz(k4 - i * 2) And bit), 7 - k)
<BR>'將字節中的某位移到最低位 <BR> k3 = k3 And &H1 '屏蔽掉其余7位
<BR> Buf1(j * 8 + k) = k2 Or k3 <BR> Next i <BR> Next k
<BR> Next j <BR> For i1 = 0 To 31 '將調整后的漢字字模再裝入原數組
<BR> Hz(i1) = Buf1(i1) <BR> HzAll(LoopAll * 32 + i1) =
Buf1(i1) <BR> Next <BR> Next LoopAll <BR> Open TempDestFile
For Binary Access Write As #1 <BR>'轉換結果保存到TempDestFile中
<BR> Put #1, 1, HzAll <BR> Close #1 <BR> MsgBox "OK!"
<BR> End Sub <BR> 以上程序均在中文VB6專業版上調試通過。
<BR> 以上程序在實用中取得了很好的效果。此漢字字模轉換程序豐富了單片機系統開發工具的功能,是包含液晶顯示功能的單片機系統在系統調試和開發過程中不可或缺的功能模塊。<BR></P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right>作者: 不詳<BR>來源:不詳</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=1 cellPadding=0 width="100%" bgColor=#cccccc
border=0>
<TBODY>
<TR>
<TD bgColor=#ffffff height=20>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="64%"
height=23><B> </B>聲明:本站部分資源來源自互聯網,如有侵權請與我們聯系!</TD>
<TD width="10%"><A onclick='javascript:SaveAs(" ","")'
href="http://www.pgsun.com/doc/200513/20051126840166.htm#">保存文章</A></TD>
<TD width="10%"><A onclick=window.print();
href="http://www.pgsun.com/doc/200513/20051126840166.htm#">打印文章</A></TD>
<TD width="16%"><A
href="javascript:window.close()">關閉窗口</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript src=""></SCRIPT>
</TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1></TD>
<TD bgColor=#333333 height=25>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=bottom height=25>
<TABLE height=21 cellSpacing=0 cellPadding=0 width="100%"
border=0><TBODY>
<TR>
<TD align=middle height=21>
<DIV align=center><A href="http://www.pgsun.com/"><FONT
color=#ffffff>
<SCRIPT language=javascript
src="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/adv_down.js"></SCRIPT>
</FONT></A><FONT
color=#ffffff></FONT></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
<TD width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=762 align=center bgColor=#ffffff
border=0>
<TBODY>
<TR>
<TD width=1 height=46></TD>
<TD
background="Visual Basic6編程中的漢字處理 ----- 程序設計聯盟 - PGSUN_com.files/top_01.jpg"
height=52>
<TABLE width="100%" border=0>
<TBODY>
<TR>
<TD align=left width="46%"><B> </B>Copyright© 2005 <STRONG><A
href="http://www.pgsun.com/"><FONT color=#000000>www.<FONT
color=#ff0000>P</FONT>GSUN.com</FONT></A></STRONG> All Rights
Reserved<BR><B> </B>建議使用IE5.0以上, 分辯率800×600 </TD>
<TD align=middle width="54%"> </TD></TR></TBODY></TABLE></TD>
<TD width=1></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -