Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 27.07.04 10:46
Может тебя устроят АПИ !?

Ответить

Номер ответа: 2
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #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-сайт: basicproduction.nm.ru/
 Профиль | | #4
Добавлено: 28.07.04 08:09
 Это работает в Richedit 2.0 или более позднем.

Ответить

Номер ответа: 5
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 29.07.04 21:16
Да там же в самом ARPAD хелп есть. Нажимаешь в тулбаре серенькую букву "P". Откроется окно форматирования параграфа.
 Для работы с параграфом используется тип PARAFORMAT2. Вот через один из его членов и изменяй межстрочный интервал.
 Щёлкни в левом списке по bLineSpacingRule.
 Ты увидишь необходимую константу для dwMask.
 Интервал укажи в bLineSpacingRule. 0-одинарный, 1-полуторный, 2-двойной.
 После задания маски и типа интервала пошли окну RichEdit'а сообщение EM_SETPARAFORMAT

На VB6 это будет выглядеть так:

1. Получение текущего формата параграфа.
 ;Dim hTgt As Long
 hTgt = Form1.RichTextBox_hWnd
 
 ;Dim 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)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам