ориентация текста

Есть ли способ выровнять текст в msflexgrid по вертикали, как это делает Excel?

спасибо

альтернативный текст


person Smith    schedule 19.09.2010    source источник


Ответы (3)


Есть много способов поворота шрифтов на 90 градусов. VB6 использует часть объекта OLE StdFont из библиотеки типов stdole2.

Вам нужно будет преобразовать StdFont в шрифт GDI, чтобы иметь возможность манипулировать им.

Вот очень хороший пост (Text At Any Angle) с примером кода, чтобы продолжать делать именно это.

Образец рисует форму, но я думаю, что вы можете получить дескриптор MSFlexGrid и рисовать в нем.

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

person Nope    schedule 24.09.2010
comment
Большое спасибо за ответ, как мне повернуть текстовое поле по горизонтали? - person Smith; 26.09.2010
comment
Я предполагаю, что вы имеете в виду повернуть текстовое поле вертикально? Я думаю, что вам нужно нарисовать как текстовое поле, так и текст через GDI самостоятельно, если вы этого хотите. Проблема здесь заключается в разнице между отображением статического текста (отрисовка его на форме при каждом событии рисования) и динамическим (текст взаимодействует с окружающей средой). Я думаю, что даже excel при отображении текста по вертикали показывает текст в горизонтальном элементе управления при редактировании. Я также не уверен, что это самый практичный или удобный способ редактирования текста в вертикальном положении. - person Nope; 26.09.2010

Нет, если вы говорите о вертикальном вращении текста.

Вы можете преобразовать текст в повернутое изображение, а затем загрузить изображение.

Подробнее…

Вы можете напечатать повернутый текст в элементе управления PictureBox, а затем назначить PictureBox ячейке.

Эта ссылка показывает аналогичное использование метода, но немного по другой причине.

http://vb.mvps.org/articles/ap199907.pdf

person Cidtek    schedule 20.09.2010
comment
Да, я имею в виду вертикально повернутый текст. Я думал об этом решении, но как насчет быстрого редактирования, как это делает Excel? Посмотрите на картинку, которую я прикрепил. - person Smith; 21.09.2010

Ничего встроенного, но вот хак, который я использовал несколько лет назад. Вы передаете строку функции, и она возвращает строку с возвратом каретки и переводом строки после каждого символа.

Private Function VerticalString(ByVal strInput As String) As String
   Dim strReturn As String
   Dim i As Integer

   For i = 1 To Len(strInput)
      strReturn = strReturn & Mid$(strInput, i, 1) & vbCrLf
   Next i

   If Len(strReturn) > 1 Then
      strReturn = Mid$(strReturn, 1, Len(strReturn) - 1)
   End If

   VerticalString = strReturn

End Function

Private Sub FillGrid()
    flexgrid1.TextMatrix(1, 0) = VerticalString("Kc Chiefs")
End Sub

вертикальный текст

person jac    schedule 20.09.2010