Как печатать цветной текст с переносами? - VB
Формулировка задачи:
Почему-то текст не желает быть цветным при печати:
Вроде все ставил - и ForeColor и шрифты, но он всё равно выводится ЧЁРНЫМ!
Help please!
Решение задачи: «Как печатать цветной текст с переносами?»
textual
Листинг программы
Option Explicit
Private Const HWND_BROADCAST As Long = &HFFFF
Private Const WM_WININICHANGE As Long = &H1A
Private Declare Function GetProfileString Lib 'kernel32' _
Alias 'GetProfileStringA' _
(ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long
Private Declare Function WriteProfileString Lib 'kernel32' _
Alias 'WriteProfileStringA' _
(ByVal lpszSection As String, _
ByVal lpszKeyName As String, _
ByVal lpszString As String) As Long
Private Declare Function SendMessage Lib 'user32' _
Alias 'SendMessageA' _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lparam As Any) As Long
Private Sub Form_Load()
ProfileLoadWinIniList List1, 'PrinterPorts'
Command1.Enabled = False
End Sub
Private Sub Command1_Click()
Call SetDefaultPrinterWinNT
End Sub
Private Sub List1_Click()
Command1.Enabled = List1.ListIndex > -1
End Sub
Private Sub SetDefaultPrinter(ByVal PrinterName As String, _
ByVal DriverName As String, _
ByVal PrinterPort As String)
Dim DeviceLine As String
'Строим строку для принтера
DeviceLine = PrinterName & ',' & DriverName & ',' & PrinterPort
'Сохранить информацию о новом принтере в секции
'[WINDOWS] файла WIN.INI для ключа DEVICE=
Call WriteProfileString('windows', 'Device', DeviceLine)
'Заставить все приложения перезагрузить INI-файл
Call SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, ByVal 'windows')
End Sub
Private Sub GetDriverAndPort(ByVal Buffer As String, _
DriverName As String, PrinterPort As String)
Dim posDriver As Long
Dim posPort As Long
DriverName = ''
PrinterPort = ''
'Имя драйвера идет вначале строки
posDriver = InStr(Buffer, ',')
If posDriver > 0 Then
'Получение имени драйвера
DriverName = Left(Buffer, posDriver - 1)
'Имя порта идет после запятой
posPort = InStr(posDriver + 1, Buffer, ',')
If posPort > 0 Then
'Получение имени порта
PrinterPort = Mid(Buffer, posDriver + 1, _
posPort - posDriver - 1)
End If
End If
End Sub
'Создаем listbox из данных win.ini
Public Function ProfileLoadWinIniList(lst As ListBox, _
lpSectionName As String) As Long
Dim success As Long
Dim nSize As Long
Dim lpKeyName As String
Dim ret As String
ret = Space$(8102)
nSize = Len(ret)
success = GetProfileString(lpSectionName, vbNullString, _
'', ret, nSize)
'Возращаемая строка является списком, разделенным
'нулевыми символами
If success Then
ret = Left$(ret, success)
Do Until ret = ''
lpKeyName = StripNulls(ret)
lst.AddItem lpKeyName
Loop
End If
'вернем число принтеров (кол-во элементов)
ProfileLoadWinIniList = lst.ListCount
End Function
Private Function StripNulls(startstr As String) As String
Dim pos As Long
pos = InStr(startstr$, Chr$(0))
If pos Then
StripNulls = Mid$(startstr, 1, pos - 1)
startstr = Mid$(startstr, pos + 1, Len(startstr))
End If
End Function