VB+API Как изменить шрифт при использовании CreateFontInd ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
dragornuss
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.08.2005 (Чт) 14:15

VB+API Как изменить шрифт при использовании CreateFontInd ?

Сообщение dragornuss » 15.08.2005 (Пн) 19:20

При создании шрифта используется CreateFontIndirect
Но в описании этой функции я не нашёл переменной для шрифта.
При выводе текста используется TextOut

Вывод тескта производится в PictureBox.
Хотелось бы использовать различные шрифты, а печатает только один :(
Подскажите плз как это сделать ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.08.2005 (Вт) 1:36

Что значит не нашёл?
Она HFONT возвращает. Его потом SelectObject в DC надо.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

dragornuss
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.08.2005 (Чт) 14:15

Сообщение dragornuss » 16.08.2005 (Вт) 5:22

Видимо я не совсем точно сформулировал вопрос.
Для начала отрывок кода

В модуле

Public Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Public Const LF_FACESIZE = 32
Public Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName(LF_FACESIZE) As Byte
End Type

В коде формы

Private Sub Form_Load()

Dim RotateMe As LOGFONT
'Set graphic-mode to 'persistent graphic'
pb.AutoRedraw = True
'Rotate degrees
Deg = -50
'Size (in points)
Size = 10
'Set the rotation degree
RotateMe.lfEscapement = Deg * 10

RotateMe.lfFaceName(23) = 3
'Set the height of the font
RotateMe.lfHeight = (Size * -20) / Screen.TwipsPerPixelY

'Здесь создаётся новый шрифт с соответствующими параметрами
'Но в типе LOGFONT нет переменной отвечающей за имя шрифта
'К примеру нужно вывести текст шрифтом OldStyle, а не текущим
'Как это сделать ?

rFont = CreateFontIndirect(RotateMe)

'Здесь Выбираем новый созданный шрифт, как сказано в SelectObject
Curent = SelectObject(pb.hdc, rFont)
'Print some text ...
TextOut pb.hdc, 10, 10, "Igor", 4
End Sub

dragornuss
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.08.2005 (Чт) 14:15

Сообщение dragornuss » 16.08.2005 (Вт) 5:22

млин, дубль бабахнул...
Последний раз редактировалось dragornuss 16.08.2005 (Вт) 7:13, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.08.2005 (Вт) 5:34

fFaceName as string * LF_FACESIZE
end type
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.08.2005 (Вт) 8:17

Не добавить надо было, а заменить то, что у тебя есть...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

dragornuss
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.08.2005 (Чт) 14:15

Сообщение dragornuss » 16.08.2005 (Вт) 11:03

Заменял, всёравно какой-то шрифт по умолчанию рисуется и всё...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.08.2005 (Вт) 11:14

RotateMe.lfFaceName = "Comic sans ms" & vbNullChar
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

dragornuss
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.08.2005 (Чт) 14:15

Сообщение dragornuss » 16.08.2005 (Вт) 11:35

Сейчас попробую

dragornuss
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 04.08.2005 (Чт) 14:15

Сообщение dragornuss » 16.08.2005 (Вт) 11:44

Ййййййессс !!!!
Спасибо огромное !
Как я понимаю, всё дело было в нулевом символе в конце строки.
А ведь ещё C++ изучаю. Видно бЕстолку... ;)
Ещё раз спасибо.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot], SemrushBot и гости: 5

    TopList