Отображение кириллицы (кодировка) - VB
Формулировка задачи:
Если язык системы не русский отображается кракозябра
менять в реестре значения cp1251 не дело, так как это может затронуть работу другого софта
Как решить данную проблему? сменить стандартный шрифт? сделать свои шрифты и носить с собой?
// программа устанавливается. так что носить шрифты с программой и их установка не проблема
Решение задачи: «Отображение кириллицы (кодировка)»
textual
Листинг программы
Option Explicit Private Sub Form_Load() lpPrevWndProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc) End Sub Private Sub Form_Resize() If Me.WindowState <> vbMinimized Then txtData.Move 5, 5, Me.ScaleWidth - 10, Me.ScaleHeight - 10 End Sub Private Sub Form_Unload(Cancel As Integer) SetWindowLong Me.hwnd, GWL_WNDPROC, lpPrevWndProc End Sub Private Sub mnuExit_Click() Unload Me End Sub Private Sub mnuPatch_Click() Dim fName As String, bName As String, sSrc As String, sUTF8() As Byte, hUpdate As Long, ret As Long fName = GetFile(Me.hwnd) If Len(fName) > 0 And Len(txtData.Text) > 0 Then bName = fName Do bName = Left$(bName, InStrRev(bName, ".") - 1) & "_backup.exe" Loop Until CopyFile(StrPtr(fName), StrPtr(bName), True) ' Пока не добъемся нужного имени FileCopy fName, Left$(fName, InStrRev(fName, ".") - 1) & "_backup.exe" hUpdate = BeginUpdateResource(StrPtr(fName), False) If hUpdate = 0 Then MsgBox "Ошибка": Exit Sub ' В UTF8 sSrc = txtData.Text ret = WideCharToMultiByte(CP_UTF8, 0, StrPtr(sSrc), Len(sSrc), 0, 0, 0, 0) ReDim sUTF8(ret - 1) WideCharToMultiByte CP_UTF8, 0, StrPtr(sSrc), Len(sSrc), sUTF8(0), ret, 0, 0 ret = UpdateResource(hUpdate, 24, 1, 0, sUTF8(0), ret) If ret = 0 Then MsgBox "Ошибка" EndUpdateResource hUpdate, False End If End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д