当前位置:编程学习 > VB >>

使用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

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
--------------------编程问答-------------------- '添加 Picture1 Picture2 Text1 Command1

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 ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,