Форматирование RichTextBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Форматирование RichTextBox

Сообщение alibek » 22.01.2007 (Пн) 12:10

Понадобилось мне написать мини-редактор. Он должен уметь менять начертание шрифта (полужирный, курсив, подчеркнутый), задавать один из трех размеров шрифта (средний, крупный, мелкий), задавать цвет текста и цвет фона.
Все, кроме цвета фона, работает. А вот с ним не получается.
Использовал такой код:
Код: Выделить всё
Private Sub RTF_SetBackcolor(ByVal Color As Long)
Dim cf As CHARFORMAT2, ret As Long
If Color = SystemColorConstants.vbWindowBackground Then
  cf.crBackColor = Color
  cf.dwMask = 0&
  cf.dwEffects = CFM_BACKCOLOR
Else
  cf.crBackColor = Color
  cf.dwMask = CFM_BACKCOLOR
  cf.dwEffects = 0&
End If
cf.cbSize = LenB(cf)
ret = SendMessage(rtfMessage.hWnd, EM_SETCHARFORMAT, SCF_SELECTION, cf)
End Sub

Не работает видимо потому, что RTB не поддерживает задание цвета фона.
Но RTB поддерживает тег \highlight. Только вот как его задать через API я не нашел.
На крайний случай можно его задавать напрямую, в TextRTF, но не хотелось бы, слишком много всего делать -- запоминать текущую позицию курсора, парсить colortbl, при необходимости добавлять цвет в таблицу и переиндексировать, вставлять теги, вырезав те \highlight, что внутри, восстанавливать позицию курсора.
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 22.01.2007 (Пн) 14:15

ЕМНИП, штатный басиковский RTB реализует Rich Text Format v1.2. Посмотри, с какого момента имеется цвет фона, и если он добавлен в спецификацию позже, то опаньки бу дезигн - вообще никак не сделаешь.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 22.01.2007 (Пн) 14:29

код за не надобностью удален

взято отсюда:
http://edeca.net/downloads/code/vb/modRTBAPI.bas

У меня EM_SETBKGNDCOLOR не работает.Вернее в десинг моде ставит все время зеленый, а в рантайм - желтый, прикольно :)
Последний раз редактировалось Dmitriy2003 22.01.2007 (Пн) 15:22, всего редактировалось 1 раз.
Dmitrich

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.01.2007 (Пн) 14:53

Ennor писал(а):ЕМНИП, штатный басиковский RTB реализует Rich Text Format v1.2. Посмотри, с какого момента имеется цвет фона, и если он добавлен в спецификацию позже, то опаньки бу дезигн - вообще никак не сделаешь.

Ну да. Потому я и highlight использую, он поддерживается и в первой версии.
Но вот не знаю, как задать это форматирование через API. Потому что через парсинг RTF это грустно и долго.

Dmitriy2003, у меня именно этот код в первом посте. Просто без деклараций.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.01.2007 (Пн) 16:49

Ха, так ведь это тема моего самого первого поста на этом форуме!! :lol: :lol:
http://bbs.vbstreets.ru/viewtopic.php?p=53677#53677
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.01.2007 (Пн) 16:57

А код, кстати, неправильный :)
Во-первых, colortbl может изначально отсутствовать и его надо будет добавлять. А во-вторых, там нет переиндексации цветов.
А вот пример от edanmo (теперь он тут) погляжу, может быть он подойдет.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.01.2007 (Пн) 17:04

Поглядел. Круто :)
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.01.2007 (Пн) 21:43

Еще вопросик.
В этом компоненте используется версия RichEdit20.
Все хорошо, но в ней так же поддерживается написание справа-налево. И переключается оно странным образом -- правый Ctrl+Shift включает RTL, левый Ctrl+Shift включает LTR. И поскольку у меня раскладка переключается по Ctrl+Shift, то часто направление текста задается не то, что нужно.
Вот собственно это и не нравится :)
С EM_SETBIDIOPTIONS повозился, но что-то не получается.
Можно правда в KeyDown блокировать, но там бы не хотелось.
Lasciate ogni speranza, voi ch'entrate.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 22.01.2007 (Пн) 22:07

alibek - а не мог бы ты выложить исходник контрола, плиз, а то скачать оригинал не судьба, антивирус паникует. (ток не msi). :(
Dmitrich

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.01.2007 (Вт) 7:39

alibek писал(а):Все хорошо, но в ней так же поддерживается написание справа-налево.

Эээ, а необходимость написания текста справа налево считается нереальной? :-?
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.01.2007 (Вт) 8:34

В моем случае - да :)
Во всяком случае пока она переключается кнопками Ctrl+Shift эта возможность гораздо больше мешает.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.01.2007 (Вт) 8:40

Dmitriy2003, лучше отключи файрвол и скачай, тебе все-равно еще пару TLB надо будет скачать, чтобы в IDE можно было пользоваться.
Lasciate ogni speranza, voi ch'entrate.

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 23.01.2007 (Вт) 9:14

alibek писал(а):Dmitriy2003, лучше отключи файрвол и скачай, тебе все-равно еще пару TLB надо будет скачать, чтобы в IDE можно было пользоваться.


так этот msi еще и в инет что-ли ломится, :evil: фигня какая-то, разве все должно быть так сложно. фтопку, все фтопку :twisted:.
ЕПРСТ открытый код
Dmitrich

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.01.2007 (Вт) 17:15

alibek писал(а):В моем случае - да :)
Во всяком случае пока она переключается кнопками Ctrl+Shift эта возможность гораздо больше мешает.

А зато как достаёт желающих сменить направление письма то, что по Ctrl+Shift одновременно сменяется ещё и язык! :twisted:
(Сорри, не удержался.)
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.01.2007 (Вт) 17:22

tyomitch писал(а):(Сорри, не удержался.)

Ты часто пишешь на иврите или по арабски? :)
В принципе, можно поменять переключение языка на Alt+Shift... :)
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.01.2007 (Вт) 17:28

Ну вот например прямо сейчас перевожу арабский текст, приходится в окно машинного переводчика его по-арабски впечатывать :-)

А к переключению по Ctrl+Shift я ещё с доса привык... Горе мне, горе.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 26

    TopList