使用fnthex32把汉字转换为图形点阵后,调用^XG打印输出到条码打印机,怎样旋转90度
使用fnthex32把汉字转换为图形点阵后,调用^XG打印输出到条码打印机,怎样旋转90度。谢谢。 --------------------编程问答-------------------- 旋转着送啊,一会儿给你一个函数。 --------------------编程问答-------------------- 抱歉,不知道你的调用^XG是什么功能,俺写过将点阵字库旋转的函数,但是好像跟您的要求并不配套。
--------------------编程问答-------------------- 也可以旋转后再去打印,能先把函数发给我试试吗。 --------------------编程问答-------------------- 再顶一下,大家帮帮忙呀 --------------------编程问答-------------------- fnthex32把汉字转换为图形点阵?? 需要那么麻烦吗?
直接把汉字放到Text1或Label, 将Text1或Label1存为图片再旋转90度,再打印Picture1不就好了吗?
如果使条码旋转,则先将Text1或文字变量转为Code39 EAN13等条码图型画到Picture1,再旋转,再打印.
--------------------编程问答-------------------- 你的字库是什么格式的,cbm666你的做法也是俺的做法,但未必是楼主的做法。
俺以前的字库每32个字节表示汉字,每两个字节表示一行,一共16行。 --------------------编程问答-------------------- 呵呵, 我参展出差在外26号才回去不然我便可以贴出"楼主可能需要的"代码了, 出差前刚刚替公司完成了楼主的需求旋转90与180度并将字体放大24*24 24*48 48*48... 这主要看楼主的条码打印机不同而有不同的代码写法, 一种是送出打印位置XY,与名称信息,字体字号与旋转角度等,由条码机自动转换为条码打印, 另种是需我们自己先转换为条码后再送出至打印机打印.
只有劳驾 Jennyvenus 同志先费心一下帮楼主解决啦.
--------------------编程问答-------------------- 谢谢各位,确实可以使用cbm666的做法,但如何截取窗体为图片再旋转呢,有没有代码
jyzl_t@163.com --------------------编程问答-------------------- 我主要zpl脚本来打印的,我贴出来大家一起学习
Dim MAX_BUFFER As Integer, nCount As Integer
Dim cBuf As String * 21000
Dim temp, temp1 As String
nCount = GETFONTHEX(txtpm.Text, "宋体", "chnstr02", 0, 30, 0, 1, 0, cBuf)
temp = Mid(cBuf, 1, nCount)
nCount = GETFONTHEX(cmbdj.Text, "宋体", "chnstr01", 0, 30, 0, 1, 0, cBuf)
temp1 = Mid(cBuf, 1, nCount)
Dim filehandle As Integer
Dim labelstring As String
labelstring = labelstring & "^XA"
labelstring = labelstring & "^CW1"
labelstring = labelstring & "^FWR"
labelstring = labelstring & "^FO250,180^A0,40,40^FD" & txtXh.Text & "^FS"
labelstring = labelstring & "^FO350,180^A0,40,40^FD" & txtjz.Text & " Kg^FS"
labelstring = labelstring & "^FO450,180^A0,40,40^XGchnstr01,1,1^FS"
labelstring = labelstring & "^FO520,180^A0,40,40^FD" & cmbPh.Text & "^FS"
labelstring = labelstring & "^FO600,180^A0,40,40^FWR^XGchnstr02,1,1^FS"'打印图片
labelstring = labelstring & "^FO350,630^A0,40,40^FD" & txtMz.Text & " Kg^FS"
labelstring = labelstring & "^FO450,630^A0,40,40^FD" & cmbTs.Text & "^FS"
labelstring = labelstring & "^FO520,630^A0,40,40^FD" & cmbNx.Text & "^FS"
labelstring = labelstring & "^FO600,630^A0,40,40^FD" & txtGg.Text & "^FS"
labelstring = labelstring & "^FO100,900^A0N^BY4^BIN,100,Y,N"
labelstring = labelstring & "^FD" & txtXh.Text & "^FS"
labelstring = labelstring & "^XZ"
'labelstring = "^XA^FO250,180^A0,40,40^FDABCEDE^FS^XZ"
filehandle = FreeFile
'Open "LPT1 " For Output As filehandle
'Print #filehandle, labelstring
'Close filehandle
Open "LPT1:" For Binary Access Write As #1
Put #1, , temp
Put #1, , temp1
Put #1, , labelstring
Close #1 --------------------编程问答-------------------- 旋转有一个极简单但是速度慢的做法。
for j = 0 to 高--------------------编程问答-------------------- 楼主等等,俺过去的函数不在手边,在写。
for i = 0 to 宽
p = point( i, j )
pset( j, i ), p
next j
next i
--------------------编程问答--------------------
Option Explicit--------------------编程问答-------------------- '添加 Picture1 Picture2 Text1 Command1
Private Function xuanzhuan(ByVal fnt As String) As String
Dim a(0 To 31) As Long
Dim b(0 To 15, 0 To 15) As Long
Dim i As Long
Dim j As Long
Dim k As Long
fnt = Replace(fnt, " ", "")
Dim l As Long
l = Len(fnt)
l = Int(l / 2) * 2 '取整
Dim p As String
For i = 1 To l - 2 Step 2
p = Mid(fnt, i, 2)
a(Int(i / 2)) = Val("&h" & p)
Next i
Dim bit As Byte
For i = 0 To 15 '16行
For j = 0 To 1 '每行2字节
For k = 7 To 0 Step -1
bit = a(i * 2 + j) \ (2 ^ k) '取出来一个bit,从高位开始取
bit = bit And 1
Debug.Print bit;
'往b()里面放
If bit Then
'b(15 - (1 - j) * 8 - k, (15 - i)) = 1 '右转90度
b((1 - j) * 8 + k, i) = 1 '左转90度
End If
Next k
Next j
Debug.Print
Next i
Debug.Print
For i = 0 To 15 '16行
For j = 0 To 15 '16个
Debug.Print b(i, j);
Next j
Debug.Print
Next i
Debug.Print
Dim ss As String
Dim tt As Long
Dim r As String
For i = 0 To 15
For j = 0 To 1
tt = 0
For k = 7 To 0 Step -1
If b(i, j * 8 + k) Then
tt = tt Or 2 ^ k
End If
Next k
If tt < 16 Then
ss = ss & "0" & Hex$(tt)
Else
ss = ss & Hex$(tt)
End If
Next j
'Debug.Print
Next i
xuanzhuan = ss
End Function
Private Sub Command1_Click()
Dim s As String
Dim i As Long
For i = 0 To 15
s = s & "F0"
Next i
For i = 0 To 15
s = s & "00"
Next i
's = "F0F0..............0000"
'旋转完应该是
Debug.Print xuanzhuan(s)
End Sub
Option Explicit
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Const Pi = 3.1415926
Dim i%, X%, Y%, X1%, Y1%, X2#, Y2#, X3#, y3#, JiaoDu#, HuDu#, hMemDc&, lngDesktopHwnd&, lngDesktopDC&
Private Sub Form_Activate()
Command1.Caption = "旋 转"
'设置窗体属性并置中
Me.BorderStyle = 0 : Me.Caption = ""
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
'设置 Picture1 属性
With Picture1
.ScaleMode = vbPixels
.AutoRedraw = True
.Width = Text1.Width
.Height = Text1.Height
.Left = Screen.Width
End With
'设置 Picture2 属性
With Picture2
.ScaleMode = vbPixels
.AutoRedraw = True
.Width = Text1.Width * 1.1
.Height = Text1.Width * 1.1
End With
'设置 Text1 属性
With Text1
.BackColor = vbBlue
.ForeColor = vbWhite
.FontSize = 20
End With
End Sub
Private Sub Command1_Click()
'抓取 Text1的图片
lngDesktopHwnd = GetDesktopWindow
lngDesktopDC = GetDC(lngDesktopHwnd)
Call BitBlt(Picture1.hdc, 0, 0, Text1.Width, Text1.Height, lngDesktopDC, (Me.Left + Text1.Left) \ 15, (Me.Top + Text1.Top) \ 15, vbSrcCopy)
Picture1.Picture = Picture1.Image
'************** 开始旋转 ***************
For i = 0 To 360 Step 5
DoEvents
Picture2.Cls
JiaoDu = i '旋转角度
If JiaoDu = 360 Then JiaoDu = 0
HuDu = JiaoDu * Pi / 180 'VB是以弧度来计算的,所以要先将角度转为弧度.
For X = 0 To Picture2.ScaleWidth
X1 = X - Picture2.ScaleWidth \ 2
For Y = 0 To Picture2.ScaleHeight
Y1 = Y - Picture2.ScaleHeight \ 2
X2 = X1 * Cos(-HuDu) + Y1 * Sin(-HuDu)
Y2 = Y1 * Cos(-HuDu) - X1 * Sin(-HuDu)
X3 = X2 + Picture1.ScaleWidth \ 2
y3 = Y2 + Picture1.ScaleHeight \ 2
If X3 > 0 And X3 < Picture1.ScaleWidth - 1 And y3 > 0 And y3 < Picture1.ScaleHeight - 1 Then Picture2.PSet (X, Y), Picture1.Point(X3, y3)
Next Y
Next X
Next i
End Sub
--------------------编程问答-------------------- 我也想知道,正在找這方面的資料~~~~~ --------------------编程问答-------------------- 用“chnstr02”时有错?
不用这个参数正常,该怎么办
补充:VB , 基础类