Страница: 1 |
Страница: 1 |
Вопрос: сделать картинку из текста, и вставить её в MSFLEX
Добавлено: 31.01.11 00:06
Автор вопроса:
Zahar | Web-сайт:
Мне необходимо вставить вертикально-ориентированный текст в верхнюю строку MSFlexGrid. Единственный возможный варинант - это преобразовать этот текст в картинку, повернуть картинку, а потом уже эту картинку вставить в соответствующую ячейку. Может кто подскажет, как это сделать?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа: udn79
Вопросов: 2
Ответов: 95
Профиль | | #1
Добавлено: 31.01.11 02:35
http://support.microsoft.com/kb/154515
где font.lfEscapement //угол наклона * 10
Номер ответа: 2
Автор ответа: udn79
Вопросов: 2
Ответов: 95
Профиль | | #2
Добавлено: 31.01.11 02:37
Создаешь свой шрифт на основе выбранного
Номер ответа: 3
Автор ответа: Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #3
Добавлено: 01.02.11 07:57
Извиняюсь за занудство - а как всё же применить поворот шрифта не к picture, а к msflexgrid?
Номер ответа: 4
Автор ответа: udn79
Вопросов: 2
Ответов: 95
Профиль | | #4
Добавлено: 01.02.11 17:50
MyDC = GetDC(hwnd)
Call SelectObject(MyDC, CreateFontIndirect(pFont))
Номер ответа: 5
Автор ответа: Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #5
Добавлено: 01.02.11 23:55
НЕ РАБОТАЕТ!!
 im font As LOGFONT
 im MyDC As Long
 im hFont As Long
font.lfEscapement = 900 ' 90-degree rotation
font.lfFaceName = "Arial" & Chr$(0)
hFont = CreateFontIndirect(font)
MyDC = GetDC(Flex.hwnd)
prevFont = SelectObject(MyDC, hFont)
Flex.TextMatrix(1, 1) = "Rotated Text"
Что я сделал не правильно??
Номер ответа: 6
Автор ответа: Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #6
Добавлено: 02.02.11 00:30
наверное нужно использовать CustomDraw. Не юзал flexgrid
Номер ответа: 7
Автор ответа: udn79
Вопросов: 2
Ответов: 95
Профиль | | #7
Добавлено: 02.02.11 16:33
смотрите исходник Text90inMFGrid.rar с коментариями
http://bbs.vbstreets.ru/viewtopic.php?f=1&t=34405&start=0
Номер ответа: 8
Автор ответа: Zahar
Вопросов: 91
Ответов: 67
Web-сайт:
Профиль | | #8
Добавлено: 03.02.11 00:15
Спасибо большое - то что надо!
Номер ответа: 9
Автор ответа: udn79
Вопросов: 2
Ответов: 95
Профиль | | #9
Добавлено: 03.02.11 06:34
Private Const DEFAULT_CHARSET = 1
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W2 As Long, ByVal I As Long, ByVal u As Long, ByVal s As Long, ByVal c As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal f As String) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Sub Command1_Click()
Dim s$
s = "Пример печати текста 90° в колонке № 0 "
With MSFlexGrid1
MakeText_90 s
.Col = 0: .Row = 0
Set .CellPicture = Picture1.Image
.CellPictureAlignment = 1
.TextMatrix(0, 0) = s
.ColWidth(0) = Picture1.TextWidth(s)
End With
'##########################################
s = "Пример печати текста 90° в колонке № 1"
With MSFlexGrid1
MakeText_90 s
.Col = 1: .Row = 0
Set .CellPicture = Picture1.Image
.CellPictureAlignment = 1
.TextMatrix(0, 0) = s
.ColWidth(1) = Picture1.TextWidth(s)
End With
End Sub
Private Sub Form_Load()
Me.ScaleMode = vbPixels
MSFlexGrid1.RowHeight(0) = MSFlexGrid1.RowHeight(0) * 10
Picture1.Height = MSFlexGrid1.RowHeight(0) / Screen.TwipsPerPixelY
Picture1.Font = MSFlexGrid1.Font
End Sub
Private Sub MakeText_90(sText As String)
Dim sClean As String
Picture1.Cls 'очищаем
Picture1.FontTransparent = False
Picture1.DrawWidth = 1
y = Picture1.ScaleHeight
lFont = CreateFont(0, 0, 900, 0, 0, 0, 0, 0, DEFAULT_CHARSET, 0, 0, 0, 0, vbNullString)
lFontOld = SelectObject(Picture1.hdc, lFont)
With Picture1
For Each n In Split(sText)
If .TextWidth(strLine & n) > .ScaleHeight Then
.CurrentX = x: .CurrentY = y
Picture1.Print strLine
strLine = n
x = x + .TextHeight("W" * 1.22
sClean = sClean & " "
Else
strLine = strLine & " " & n
End If
.CurrentX = x: .CurrentY = y
Picture1.Print strLine
Next
End With
Res = SelectObject(Picture1.hdc, lFontOld)
Res = DeleteObject(lFont)
sText = sClean & " "
End Sub
Номер ответа: 10
Автор ответа: udn79
Вопросов: 2
Ответов: 95
Профиль | | #10
Добавлено: 03.02.11 06:35
Это для текущего шрифта, чтоб не заморачиваться