Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Рендер BBCode в System.Drawing / 3 сообщений из 3, страница 1 из 1
11.02.2015, 20:12
    #38877374
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рендер BBCode в System.Drawing
Нашел велосипед, парсящий бибикоды в объектную модель: http://www.java2s.com/Open-Source/CSharp_Free_CodeDownload/b/bbcodelibrary.zip

Основной цикл отрисовки:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    Private Sub DrawText(pn As BBCode.Collections.NodeCollection, objGraphics As Graphics, f As Font)
        Dim i As Integer
        For Each n As BBCode.Nodes.INode In pn

            'If n.Tag.Name = "b" Then f.Bold = True 

            Dim bbc As BBCode.Nodes.BBCode = n

            i = InStr(bbc.InnerText, "[")
            If i > 1 Then objGraphics.DrawString(Mid(bbc.InnerText, 1, i), f, Brushes.Black, 0, 0)
            DrawText(bbc.Children, objGraphics, f)
            i = InStrRev(bbc.InnerText, "]")
            If i < Len(bbc.InnerText) Then objGraphics.DrawString(Mid(bbc.InnerText, i + 1), f, Brushes.Black, 0, 0)

            'If n.Tag.Name = "b" Then f.Bold = False

        Next
    End Sub

Проблема в следующем: как узнать координаты окончания DrawString?

Если напечатать весь текст без разрывов в координатах 0,0, то он выведется с сохранением переносов и прочего текстового форматирования, но мне нужно выводить его кусками. А сейчас с координатами 0,0 все куски выводятся поверх друг друга в углу. :(

В VB6 была функция Form.TextWidth, возвращающая ширину текста при текущих настройках шрифта, а в дотнете нашел только это:

Public Property MaxTextWidth/MaxTextHeight As Double
Member of System.Windows.Media.FormattedText

Но оно относится к wpf, там даже вместо Font используется TypeFace.
...
Рейтинг: 0 / 0
11.02.2015, 21:24
    #38877411
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рендер BBCode в System.Drawing
Antonariy,

вместе с Graphics.DrawString используется Graphics.MeasureString .

Можно ещё использовать TextRenderer.DrawText и TextRenderer.MeasureText.
...
Рейтинг: 0 / 0
12.02.2015, 11:19
    #38877757
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рендер BBCode в System.Drawing
Спасибо!
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Рендер BBCode в System.Drawing / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]