Страница: 1 |
Страница: 1 |
Вопрос: Межстрочный интервал в RTB - вопрос к знатокам.
Добавлено: 27.07.04 09:31
Автор вопроса: Ruslan_x
Проблема - нужно установить межстрочный интервал в RichTextBox. Например, полуторный, двойной и т.д.
Как сделать это средствами .NET?
Уже два дня рою интернет вдоль и поперек и ничего пока найти не могу.
Есть, правда, один способ, но он далек от совершенства. Это - использование RTF кодов при инициализации RTB.
------------------
Private Sub initRTBRus()
TextBoxRus.Rtf = "{\rtf1\ansi\ansicpg1251 \deff0\deflang1049{\fonttbl{\f0\fnil\fcharset204{\*\fname Times New Roman;}Times New Roman CYR;}}\viewkind4\uc1\pard\sl600\slmult1\f0\fs24\par}"
End Sub
------------------
За установление что-то похожего на двойной пробел отвечают следующие коды:
\sl600\slmult1
Проблема с этим способом в том, что после некоторых операций с RTB настройки сбиваются и межстрочный интервал опять становится одинарным.
Надеюсь, что кто-нибудь сможет подсказать нормальный способ установки межстрочного интервала.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 27.07.04 10:46
Может тебя устроят АПИ !?
Номер ответа: 2
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #2
Добавлено: 27.07.04 11:32
Если не найдёшь на .NET, то можешь глянуть как это делать на API.
Вот пример с моего сайта
http://basicproduction.nm.ru/bparpad2.rar
Или можешь поискать контрол в исходниках от sne.
Оба для VB6
Номер ответа: 3
Автор ответа:
Ruslan_x
Вопросов: 7
Ответов: 41
Профиль | | #3
Добавлено: 28.07.04 07:13
Благодарю за ответы!
Прежде, чем разбираться с API, хотел бы уточнить - это сработает в VB.NET?
Или это только для VB6?
Номер ответа: 4
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #4
Добавлено: 28.07.04 08:09
Это работает в Richedit 2.0 или более позднем.
Номер ответа: 5
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #5
Добавлено: 28.07.04 09:34
Да, API функции будут работать в VB .NET.
Подробнее см. в MSDN, например, поищи статью
Walkthrough: Calling Windows APIs
Номер ответа: 6
Автор ответа:
Ruslan_x
Вопросов: 7
Ответов: 41
Профиль | | #6
Добавлено: 28.07.04 11:25
Большое спасибо за совет!
Пошел разбираться с API...
Номер ответа: 7
Автор ответа:
Ruslan_x
Вопросов: 7
Ответов: 41
Профиль | | #7
Добавлено: 28.07.04 12:05
...что-то туго идет...
Прочитал Walkthrough: Calling Windows APIs. Нашел там пропущенный пробел (послал сообщение об ошибке на Майкрософт).
Скачал файл
http://basicproduction.nm.ru/bparpad2.rar
(Спасибо, @CyRax PTR). Правда листинг большой, нужно время, чтобы разобраться.
В голове пока ясности нет.
Может, кто на пальцах объяснит, как это с API сделать?
Номер ответа: 8
Автор ответа:
Ruslan_x
Вопросов: 7
Ответов: 41
Профиль | | #8
Добавлено: 29.07.04 15:12
С API так и не смог разобраться.
Но все-таки решил проблему с помощью RTF кодов.
Оказывается, надо было не инициализировать RTB, а посылать RTF коды ВМЕСТЕ с текстом. Тогда все получается нормально.
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 29.07.04 21:16
Да там же в самом ARPAD хелп есть. Нажимаешь в тулбаре серенькую букву "P". Откроется окно форматирования параграфа.
Для работы с параграфом используется тип PARAFORMAT2. Вот через один из его членов и изменяй межстрочный интервал.
Щёлкни в левом списке по bLineSpacingRule.
Ты увидишь необходимую константу для dwMask.
Интервал укажи в bLineSpacingRule. 0-одинарный, 1-полуторный, 2-двойной.
После задания маски и типа интервала пошли окну RichEdit'а сообщение EM_SETPARAFORMAT
На VB6 это будет выглядеть так:
1. Получение текущего формата параграфа.
 im hTgt As Long
hTgt = Form1.RichTextBox_hWnd
 im QPFM As ParaFormat2
QPFM.cbSize = Len(QPFM)
SendMessage hTgt, EM_GETPARAFORMAT, 0&, QPFM
2. Изменение свойств параграфа
QPFM.dwMask = PFM_LINESPACING
QPFM.bLineSpacingRule = 0 'Одинарный (1-полуторный,2-двойной)
SmR = SendMessage(hTgt, EM_SETPARAFORMAT, 0&, QPFM)