Страница: 1 |
Вопрос: Межстрочный интервал в RTB - вопрос к знатокам. | Добавлено: 27.07.04 09:31 |
Автор вопроса: ![]() |
Проблема - нужно установить межстрочный интервал в 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 27.07.04 10:46 |
Может тебя устроят АПИ !? |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 204447456 Вопросов: 28 Ответов: 664 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 27.07.04 11:32 |
Если не найдёшь на .NET, то можешь глянуть как это делать на API.
Вот пример с моего сайта http://basicproduction.nm.ru/bparpad2.rar Или можешь поискать контрол в исходниках от sne. Оба для VB6 |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 7 Ответов: 41 |
Профиль | Цитата | #3 | Добавлено: 28.07.04 07:13 |
Благодарю за ответы!
Прежде, чем разбираться с API, хотел бы уточнить - это сработает в VB.NET? Или это только для VB6? |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 7 Ответов: 41 |
Профиль | Цитата | #6 | Добавлено: 28.07.04 11:25 |
Большое спасибо за совет!
Пошел разбираться с API... |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 7 Ответов: 41 |
Профиль | Цитата | #7 | Добавлено: 28.07.04 12:05 |
...что-то туго идет...
Прочитал Walkthrough: Calling Windows APIs. Нашел там пропущенный пробел (послал сообщение об ошибке на Майкрософт). Скачал файл http://basicproduction.nm.ru/bparpad2.rar (Спасибо, @CyRax PTR). Правда листинг большой, нужно время, чтобы разобраться. В голове пока ясности нет. Может, кто на пальцах объяснит, как это с API сделать? |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 7 Ответов: 41 |
Профиль | Цитата | #8 | Добавлено: 29.07.04 15:12 |
С API так и не смог разобраться.
Но все-таки решил проблему с помощью RTF кодов. Оказывается, надо было не инициализировать RTB, а посылать RTF коды ВМЕСТЕ с текстом. Тогда все получается нормально. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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. Получение текущего формата параграфа. ![]() hTgt = Form1.RichTextBox_hWnd ![]() 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) |
Страница: 1 |
|