Глюки со шрифтами в RichTextBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nero
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 30.03.2004 (Вт) 15:18

Глюки со шрифтами в RichTextBox

Сообщение Nero » 30.03.2004 (Вт) 16:40

Пишу сейчас IRC-клиент на vb6.0. Все уже почти готово, да вот только один трабл:
Там есть алгоритм раскраски текста, работает так: просматривает посимвольно строку на наличие спец символа, например символа подчеркивания (Ctrl+U в mIRC), меняет .SelUnderline у RichTextBox'а если находит такой символ и идет дальше. При этом все что не является этими самыми спец символами шлепается поочередно по мере просматривания строки.
Но вот проблема: периодически в RichTextBox меняется шрифт на Arial. Всмысле печатает-печатает и вдруг - шлеп! строка шрифтом Arial вместо Tahoma например :((((( И так далее...
Я уже все перепробовал, понатыкивал везде .SelFontName = "Tahoma" и т.п. - бесполезно :( Хотел алгоритм поменять да там очень трудно какой-то другой придумать... Натянул кучу исходников, все просмотрел, в некоторых тот же глюк, в некоторых алгоритм не подходит :(
Вобщем в последней надежде пришел сюда... Если олл найдет чем помочь буду просто мегаблагодарен!

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

Сообщение Ennor » 30.03.2004 (Вт) 17:41

Рекомендация самой Microsoft в этом вопросе звучит примерно так:

1. В design time в контроле не должно быть никакого текста;
2. В Form_Load необходимо проинитить компонент (допустим, Me.rtb_Main.Font) следующим образом:
2.1. Установить гарнитуру (имя шрифта);
2.2. Установить кегль (размер шрифта);
2.3. (Господа, где ваши бубны?) ЕЩЕ РАЗ установить гарнитуру :shock: ;
2.4. Установить остальные свойства типа Bold, Italic и пр.
3. Больше никогда (до самого Form_Unload) не трогать гарнитуру. Если трогать, то не через свойство Font, а через SelFontName, предварительно выделив весь текст.
4. Никогда не загружать RTF-файлы, только текст.
5. И вообще, работать через API.

Ну, последнее я от себя добавил, но, думаю, дядя Билли согласился бы с этим. Неимоверно глючный и кастрированный контрол по сравнению с полной спецификацией RTF-формата. Что поделать, другого нет (я просто уже искал, год назад где-то). Кстати, эта последовательность тоже, к сожалению, работает не всегда, более того, от машины к машине глюки то есть, то нет. У меня на W2K Server English более-менее, на XP English глючит, на 9х вообще чертегознаит что творится, на русском винтукей-сервере работает. Это при том, что текст всегда на английском.

Сушите бубны и разучивайте танцы, короче. :?

Nero
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 30.03.2004 (Вт) 15:18

Гм...

Сообщение Nero » 30.03.2004 (Вт) 18:04

Спасибо! Сейчас попробую... Правда половина уже так и есть.
И еще: если API, то какую именно? SendMessageLong рад бы юзать да хз как с ней разобраться :(

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

Сообщение Ennor » 30.03.2004 (Вт) 18:18

Совершенно верно, обычный SendMessage(). Ищи в MSDN раздел Rich Edit Control Reference, и там смотри. Там много всякого...

Nero
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 30.03.2004 (Вт) 15:18

Сообщение Nero » 30.03.2004 (Вт) 19:19

Ковырялся уже... Примерчик бы :(
Может урл в инете?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 30.03.2004 (Вт) 19:50

Может быть это поможет? Сам то я ленивый человек, с API копаюсь только в случае _жуткой_ надобности :oops: . Автор примера - Cyrax, уважаемый человек на форуме:
Вложения
BPARPAD1.zip
BPARPAD - чистый Rich API, ни строки кода с использованием RichTextBox'ов. (c) Cyrax
(34.07 Кб) Скачиваний: 45
Моду создают модоки, а распространяют модозвоны.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.03.2004 (Ср) 7:01

Щас скажу...

WordPad знаете? Так вот если там большой текстовик открыть и поскроллить его, то постоянно происходит переход на arial в случайном месте скролла. Вызываю меню шрифта - там не ариал. Ничего не меняя, жму ОК, скроллю дальше - не ариал, но то, что было ариалом, ариалом и осталось. Но если оно за экран уйдёт, а потом вернётся, то будет не ариалом.
Если, конечно, к этому времени не произойдёт ещё один срыв на ариал.
Безумно меня это раздражает.
А виноват, соотв., сам RTB.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 31.03.2004 (Ср) 9:28

hCORe писал(а):... Автор примера - Cyrax, уважаемый человек на форуме: ...

спасибо, конечно, за добрые слова... но пример к сожалению не мой, а моего тезки... Изображение
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 31.03.2004 (Ср) 13:00

Правда? Что-то много Cyrax'ов завелось. Будем отстреливать :wink:
А пример вообще-то хрестоматийный и очень познавательный :!:
Моду создают модоки, а распространяют модозвоны.

Nero
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 30.03.2004 (Вт) 15:18

хех

Сообщение Nero » 05.04.2004 (Пн) 12:08

Спасибо всем, расковырял все и переделал на API. Правда исправилось все равно не все :(
В частности, однозначно видел что спецсимволы вроде '°', '№' и '©' меняют шрифт на стандартный. Правда текст шлепается через RTF.SelText - может это тоже через API сделать?


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

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

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 44

    TopList