Могут ли выводимые в RichTextBox символы влиять на отображен

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Могут ли выводимые в RichTextBox символы влиять на отображен

Сообщение Ruslan Demidow » 08.06.2004 (Вт) 13:24

Могут ли выводимые в RichTextBox символы влиять на отображение шрифтов в контроле?

Тема такая: у меня в проекте есть окно сообщений (RTB).
В это окно я походу работы программы вывожу текст сообщения.
В зависимости от содержимого строк я применяю тот или иной шрифт (данные шрифта хранятся в переменных объявленных как New StdFont).
В RTB я просто программно выделяю текст и применяю к нему нужный шрифт
Код: Выделить всё
    With MsgTextBox
          .SelColor = lColor
          .SelFontName = iFont.Name
          .SelFontSize = iFont.Size
          .SelBold = iFont.Bold
          .SelItalic = iFont.Italic
     End With

Всё нормально. Всё отображается как надо. Выбираю специально моноширинные шрифты.
Так вот. После вывода нескольких сообщений, после одних и тех же определённых сообщений, весь шрифт в RTB преобразуется к "Arial" с теми же размерами и атрибутами. И уже никакие настройки программы сменить это отображение не могут. После повторного запуска программы - опять же всё нормально, и дальше по кругу.
Если выделить в RTB текст который отображается Arial и выполнить
Debug.Print MsgTextBox.SelFontName
то VB честно отображает что это моноширинный шрифт Lucinda Console.
Где может быть ошибка?
Кстати, после ошибки, данные настройки не действуют и на контрол (richtextbox) в окне превьюва (а уж там-то никаких непечатных символов быть не может).
Через контроль переменных во время выполнения программы отслеживал изменения шрифта используемого для применения к тексту - никаких изменений. Как задан Lucinda Console, так до выхода из программы и остаётся.
Помогите, плиз, разобраться.
Может я что не так делаю? :(

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 08.06.2004 (Вт) 20:07

Ну так что, никто и не подскажет? :(

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

Сообщение hCORe » 08.06.2004 (Вт) 20:33

Это глюки RichTextBox...

Однако попробуй вот это:
Код: Выделить всё
Public Sub InitRTB()
On Error Resume Next
    'присвоить все необходимое rtf.Font.Name
    '...

    'записать в RTF коды
    rtf.TextRTF = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\" & _
    "fcharset204 " & rtf.Font.Name & ";}{\f1\fnil\" & _
    "fcharset0 " & rtf.Font.Name & ";}}" & vbCrLf & _
    "\viewkind4\uc1\pard\lang1049\f0\fs20" & vbCrLf & _
    "\par }"
End Sub

Public Sub ChangeFont()
On Error Resume Next
    rtf.SelLength = Len(rtf.Text)-rtf.SelStart
    'операции по изменению текста
    '...
End Sub


В InitRTB помести установку шрифта (rtf.Font.Name), в ChangeFont - установку шрифта (rtf.SelFontName) и всего остального.
InitRTB вызывай перед загрузкой файлов и при старте программы. ChangeFont - при каждом добавлении текста. Может быть, это поможет... хотя неуверен :oops:
Моду создают модоки, а распространяют модозвоны.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 09.06.2004 (Ср) 8:59

Ага. Спасибо за ответ.
Я вот тут сделал на форме Label и в нём перед формированием текста сообщения делал так
Код: Выделить всё
MsgTextBox.Text=""
MsgTextBox.TextRTF=""
Label.Caption=Len(MsgTextBox.TextRTF)
.... формирование текста сообщения

Так вот, даже если я очищаю TextRTF и Text - то всёравно длинна TextRTF не равна нулю. где-то около 167 или 169.
Вывел MsgTextBox.TextRTF в простой текст и увидел в нём примерно то же что ты привёл в процедуре инициализации RTB.
Но всё равно спасибо. Сегодня попробую.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 17.06.2004 (Чт) 15:52

hCORe писал(а):Это глюки RichTextBox...

Однако попробуй вот это:
Код: Выделить всё
Public Sub InitRTB()
On Error Resume Next
    'присвоить все необходимое rtf.Font.Name
    '...

    'записать в RTF коды
    rtf.TextRTF = "{\rtf1\ansi\deff0{\fonttbl{\f0\fnil" & _
    "fcharset204 " & rtf.Font.Name & ";}{\f1\fnil" & _
    "fcharset0 " & rtf.Font.Name & ";}}" & vbCrLf & _
    "\viewkind4\uc1\pard\lang1049\f0\fs20" & vbCrLf & _
    "\par }"
End Sub


"{\rtf1\ansi\deff0... - это для отображения, насколько я понял в Ansi, а я хочу в OEM. MSDN за 2003 год весь перекопал - не нашёл
:cry:
Как сделать чтобы символы отображались в ОЕМ. Шрифт указываю ОЕМ-ный.


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

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

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

    TopList