⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modpubsub.bas

📁 12864 lcd 的字模提取软件
💻 BAS
字号:
Attribute VB_Name = "modPubSub"
Option Explicit

Public Const LEFT_MARGIN As Integer = 10
Public Const TOP_MARGIN As Integer = 10
Public Const LCD_DOT_SIDE_LENGTH  As Integer = 3
Public Const LCD_DOT_DOT_SPACE  As Integer = 2
Public Const BASIC_CHARS   As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Public Const SPECIAL_CHARS As String = ".-=/>?~""%"


Public Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public sChineseCharacters As String
Public sAllCharacters As String

Public bCapture As Boolean
Public Data(0 To 7, 0 To 127) As Byte
Public SaveData(0 To 7, 0 To 127) As Byte
Public MouseX As Integer
Public MouseY As Integer

Public Type udtFontInfo
  Name As String
  Size As Byte
End Type

Public Type udtCharInfo
  Top As Byte
  Bottom As Byte
  Left As Byte
  Right As Byte
  Width As Byte
  Height As Byte
End Type

Public Enum emFontKind
  emPrimarySmall = 1
  emSecondarySmall = 2
  emPrimaryBig = 3
  emSecondaryBig = 4
End Enum

Public mPrimarySmallFont As udtFontInfo
Public mSecondarySmallFont As udtFontInfo
Public mPrimaryBigFont As udtFontInfo
Public mSecondaryBigFont As udtFontInfo

Public Function Add0Hex(ByVal n As Byte) As String
  Add0Hex = IIf(n < 16, "0", "") & Hex(n)
End Function

Public Sub BackupData()
  Dim i As Byte
  Dim j As Byte
  
  For i = 0 To 7
    For j = 0 To 127
      SaveData(i, j) = Data(i, j)
    Next j
  Next i
End Sub

Public Sub RestoreData()
  Dim i As Byte
  Dim j As Byte
  Dim k  As Byte
  
  For i = 0 To 7
    For j = 0 To 127
      Data(i, j) = SaveData(i, j)
      For k = 0 To 7
        Call ShowPt(j, i * 8 + k, (Data(i, j) And (2 ^ k)) <> 0)
      Next k
    Next j
  Next i
End Sub

Public Sub GenerateImage(ByVal x1 As Byte, ByVal y1 As Byte)
  Dim MyDc As Long
  Dim X As Byte
  Dim Y As Byte
  Dim x0 As Integer
  Dim y0 As Integer
  Dim bSet As Boolean
  Dim MyChar As udtCharInfo
  
  Call GetCharSize(MyChar, False)
  
  MyDc = GetDC(frmMain.txtChar.hWnd)
  Call BackupData
  For X = MyChar.Left To MyChar.Right
    For Y = MyChar.Top To MyChar.Bottom
      bSet = IsPixelChar(GetPixel(MyDc, X, Y))
      x0 = X - MyChar.Left + x1
      y0 = Y - MyChar.Top + y1
      Call ShowPt(x0, y0, bSet)
      Call SetData(y0, x0, bSet)
    Next Y
  Next X
  CloseHandle MyDc
End Sub

Public Sub AdjustCharPos(ByVal Ch As String, ByRef CharTop As Byte, ByRef CharBottom As Byte, ByVal bBigTrueSmallFalse As Boolean)
  If bBigTrueSmallFalse Then '16×16 大字体
  
    Select Case Ch
      Case Else
        
    End Select
    
  Else '8×8 小字体
  
    Select Case Ch
      Case Else
        
    End Select
    
  End If
End Sub

Public Sub SetTextOrLabelFontByCDlg(ByRef ctl As Control)
  Debug.Assert TypeName(ctl) = "Label" Or TypeName(ctl) = "TextBox"
  With ctl
    .FontBold = frmMain.cdlg.FontBold
    .FontItalic = frmMain.cdlg.FontItalic
    .FontName = frmMain.cdlg.FontName
    .FontSize = frmMain.cdlg.FontSize
    .FontStrikethru = frmMain.cdlg.FontStrikethru
    .FontUnderline = frmMain.cdlg.FontUnderline
    .ForeColor = frmMain.cdlg.Color
    
    If TypeName(ctl) = "Label" Then
      .Caption = frmMain.cdlg.FontName & " " & CStr(frmMain.cdlg.FontSize)
    End If
  End With
End Sub

Public Sub SetFontInfo(ByRef fi As udtFontInfo, ByVal Name As String, ByVal Size As Byte)
  fi.Name = Name
  fi.Size = Size
End Sub

Public Sub ShowCharInfo()
  Dim MyDc As Long
  Dim X As Byte
  Dim Y As Byte
  Dim t As Byte
  Dim s As String
  Dim Page As Byte
  Dim sCharData As String
  Dim YInit As Byte
  Dim MyChar As udtCharInfo
  
  Call GetCharSize(MyChar, False)
  
  If MyChar.Bottom - MyChar.Top > 7 Then
    Call AdjustCharPos(frmMain.txtChar.Text, MyChar.Top, MyChar.Bottom, True)
  Else
    Call AdjustCharPos(frmMain.txtChar.Text, MyChar.Top, MyChar.Bottom, False)
  End If
    
  s = ""
  s = s & "字符" & IIf(Len(frmMain.txtChar.Text) = 1, "", "串") & "“" & frmMain.txtChar.Text & "”的信息:" & vbCrLf & vbCrLf
  s = s & "宽:" & CStr(MyChar.Width) & vbCrLf
  s = s & "高:" & CStr(MyChar.Height) & vbCrLf & vbCrLf
  s = s & "点阵数据:" & vbCrLf
  
  sCharData = ""
  MyDc = GetDC(frmMain.txtChar.hWnd)
  
  For Page = 1 To (MyChar.Height) \ 8 + 1
    For X = MyChar.Left To MyChar.Right
      t = 0
      YInit = MyChar.Top + (Page - 1) * 8
      For Y = YInit To YInit + 7
        If IsPixelChar(GetPixel(MyDc, X, Y)) Then
          t = t + 2 ^ (Y - YInit)
        End If
      Next Y
      sCharData = sCharData & "0x" & Add0Hex(t) & ","
    Next X
    sCharData = sCharData & vbCrLf
  Next Page
  
  
  CloseHandle MyDc
  
  frmMain.txtCode.Text = s & sCharData
End Sub

Public Sub GetCharSize(ByRef MyChar As udtCharInfo, Optional ByVal bFastMode As Boolean = True)
  Dim MyDc As Long
  Dim X As Integer
  Dim Y As Integer
  Dim FinalValue As Integer
  
  FinalValue = IIf(bFastMode, 20, 200)
  MyDc = GetDC(frmMain.txtChar.hWnd)
  
  For X = 0 To FinalValue
    For Y = 0 To FinalValue
      If IsPixelChar(GetPixel(MyDc, X, Y)) Then
        MyChar.Left = X
        GoTo GetRight:
      End If
    Next Y
  Next X
  
GetRight:
  For X = FinalValue To 0 Step -1
    For Y = 0 To FinalValue
      If IsPixelChar(GetPixel(MyDc, X, Y)) Then
        MyChar.Right = X
        GoTo GetTop:
      End If
    Next Y
  Next X

GetTop:
  For Y = 0 To FinalValue
    For X = 0 To FinalValue
      If IsPixelChar(GetPixel(MyDc, X, Y)) Then
        MyChar.Top = Y
        GoTo GetBottom:
      End If
    Next X
  Next Y

GetBottom:
  For Y = FinalValue To 0 Step -1
    For X = 0 To FinalValue
      If IsPixelChar(GetPixel(MyDc, X, Y)) Then
        MyChar.Bottom = Y
        GoTo GetWidthAndHeight:
      End If
    Next X
  Next Y

GetWidthAndHeight:
  MyChar.Width = MyChar.Right - MyChar.Left + 1
  MyChar.Height = MyChar.Bottom - MyChar.Top + 1

  CloseHandle MyDc
End Sub
Public Function IsPixelChar(ByVal lColor As Long) As Boolean
  IsPixelChar = (lColor <> vbWhite And lColor <> -1)
End Function

Public Sub SetData(ByVal X As Integer, ByVal Y As Integer, ByVal bFlag As Boolean)
  Dim XPage As Byte
  Dim Pos As Byte

  If X >= 0 And X <= 63 And Y >= 0 And Y <= 127 Then
    XPage = Int(X / 8)
    Pos = X Mod 8
    If bFlag Then
      Data(XPage, Y) = Data(XPage, Y) Or (1 * 2 ^ Pos)
    Else
      Data(XPage, Y) = Data(XPage, Y) And (Not (1 * 2 ^ Pos))
    End If
  End If
End Sub

Public Sub ShowPt(ByVal X As Integer, ByVal Y As Integer, ByVal bFlag As Boolean)
  If X >= 0 And X <= 127 And Y >= 0 And Y <= 63 Then
    frmMain.ForeColor = IIf(bFlag, vbBlack, &HC000&)
    frmMain.FillColor = IIf(bFlag, vbBlack, &HC000&)
    frmMain.Line (LEFT_MARGIN + X * (LCD_DOT_SIDE_LENGTH + LCD_DOT_DOT_SPACE), TOP_MARGIN + Y * (LCD_DOT_SIDE_LENGTH + LCD_DOT_DOT_SPACE))-Step(LCD_DOT_SIDE_LENGTH, LCD_DOT_SIDE_LENGTH), , B
  End If
End Sub

Public Function GetFontHeightInvalidString(ByVal MaxHeight As Byte) As String
  Dim i As Byte
  Dim s As String
  Dim MyChar As udtCharInfo
  
  Debug.Assert MaxHeight = 8 Or MaxHeight = 16
  
  s = ""
  For i = 1 To Len(sAllCharacters)
    frmMain.txtChar.Text = Mid(sAllCharacters, i, 1)
    DoEvents
    
    Call GetCharSize(MyChar)
    If MyChar.Height > MaxHeight Then
      s = s & Chr(i)
    End If
  Next i
  
  GetFontHeightInvalidString = s
End Function

Public Sub HightlightCmdBtn(ByRef cmd As CommandButton)
  With frmMain
    .cmdPrimaryBigFont.BackColor = vbButtonFace
    .cmdSecondaryBigFont.BackColor = vbButtonFace
    .cmdPrimarySmallFont.BackColor = vbButtonFace
    .cmdSecondarySmallFont.BackColor = vbButtonFace
    cmd.BackColor = &HEAFFEA
  End With
End Sub

Public Sub SetTextboxFont(ByVal emFont As emFontKind)
  With frmMain.txtChar
    Select Case emFont
      Case emPrimarySmall
        .FontName = mPrimarySmallFont.Name
        .FontSize = mPrimarySmallFont.Size
      Case emSecondarySmall
        .FontName = mSecondarySmallFont.Name
        .FontSize = mSecondarySmallFont.Size
      Case emPrimaryBig
        .FontName = mPrimaryBigFont.Name
        .FontSize = mPrimaryBigFont.Size
      Case emSecondaryBig
        .FontName = mSecondaryBigFont.Name
        .FontSize = mSecondaryBigFont.Size
      Case Else
        MsgBox "No define font!", vbCritical, "Sub SetTextboxFont"
    End Select
  End With
End Sub

Public Function RTrim1(ByVal s As String) As String
  RTrim1 = Left(s, Len(s) - 1)
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -