powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Рендер BBCode в System.Drawing
3 сообщений из 3, страница 1 из 1
Рендер BBCode в System.Drawing
    #38877374
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел велосипед, парсящий бибикоды в объектную модель: 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
Рендер BBCode в System.Drawing
    #38877411
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

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

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


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