Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 8

Некорректное отображение значения строковой переменной в RichTextBox'e

05.07.2011, 19:50. Показов 1234. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вопрос: Почему, когда я подставляю резервные слова из строкового массива (переменная MyStringArray(ii) as string), я получаю в RichTextBoxe не подсвеченное значение переменной MyStringArray(ii), а строку следующего содержания:

cf1 Rtf1cf1 ANsicf1 ANsiCPg1251Eff0EfLANg1049NtTBLNiLcf1 FChARsETNAmECouRiERNEw;CouRiERNEw CYR;NiLcf1 FChARsETCouRiERNEw;LortbL;LorTBL;Ed0EENL uE;LoRTBL;cf1 REd0REENLuE;cf1 ViEwKiNd4ARd(VOVA-значение моей переменной,скобки и комментариий мой)cf0 LANg1033 ARcf0 LANg1049AR

когда подставляю раскомментированные слова ('COMMAND ', 'ERROR ', 'COMMENT ',), а свой код убираю, все работает корректно.

Благодарю за пояснения!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
'//////////////////////////////////////////////
'это моя прoцедура
Public Sub GetReserveWord()
Const PARSECHAR = ' '
Dim ii As Integer, LenString As Integer, nn As Integer, nnn As String
    Set m_objEditor = New CEditor
    
    m_objEditor.SetEditorObjects Me.txtGlav
 
For ii = 1 To 1545
      nn = InStr(1, MyStringArray(ii), PARSECHAR)
      m_objEditor.AddEditorWord Mid$(MyStringArray(ii), 1, nn - 1), vbBlue ' ПРОБЛЕМА
 
'    m_objEditor.AddEditorWord 'COMMAND ', vbRed        
'    m_objEditor.AddEditorWord 'ERROR ', vbBlue
'    m_objEditor.AddEditorWord 'COMMENT ', vbGreen
 
Next ii
End Sub
 
' это код класса для подсветки синтаксиса не мой
'////////////////////////////////////////////////////////////////////////
'Light RTF editor class
'Written by adi barda israel (adib@malam.com)
 
'This is a light version of my editor class
'The complete class also supports VB like intelisence
 
Option Explicit
 
Private Type InterfaceData
    Class As String
    method As String
    IsMethod As Boolean
    ToolTip As String
End Type
Private m_Interface() As InterfaceData
 
Const abGREEN = 32768
 
Private Type POINTAPI
    X As Long
    Y As Long
End Type
 
Private Type EditorWords
    color As Long
    wrd As String
End Type
Private m_arrWords() As EditorWords
 
Private Declare Function GetCaretPos Lib 'user32' (lpPoint As POINTAPI) As Long
 
Private m_bPaintText As Boolean
 
Private m_iPicHeight As Long
Private WithEvents m_txtScript As RichTextLib.RichTextBox
'Private m_DebugTextbox As RichTextLib.RichTextBox
 
Public Sub AddEditorWord(ByVal wrd As String, ByVal color As Long)
 
    Dim i  As Long
    
    i = UBound(m_arrWords())
    
    If m_arrWords(0).wrd = '' Then
        i = 0
    Else
        i = i + 1
    End If
    
    ReDim Preserve m_arrWords(i)
    m_arrWords(i).wrd = wrd
    m_arrWords(i).color = color
    
    
End Sub
 
Public Sub SetEditorObjects(ByRef objRTF As RichTextLib.RichTextBox) ',
                            'ByRef DebugTextbox As RichTextLib.RichTextBox)
                           
    'Init editor objects
    Set m_txtScript = objRTF 'main script text box
    'Set m_DebugTextbox = DebugTextbox 'need this for smooth painting
    
    ClearScript
    
End Sub
 
Public Sub PaintText()
 
    Dim iPos As Long
    Dim i As Long
    Dim iCnt As Long
    
    Dim arrWrd() As String
    
    
   
    ReDim arrWrd(0)
    iCnt = 0
    
    iPos = m_txtScript.SelStart
    
    For i = 0 To UBound(m_arrWords())
    
        If m_arrWords(i).wrd = '' Then
            Exit For
        End If
        
        ReDim Preserve arrWrd(iCnt)
        arrWrd(iCnt) = m_arrWords(i).wrd
        
        'Is it the last wor >            If iStart > 0 Then
            
                'Check if its hebrew letter
                If Mid$(sRTF, iStart - 1, 1) <> ' ' Then
                
                    'Check && update the color table
                    iColor = SetColorTable(sRTF, color)
                    
                    iStart = InStr(iStart, sRTF, wrd, vbTextCompare)
                    iEnd = InStr(iStart, sRTF, vbNewLine)
                    iCommaPlace = InStr(iStart, sRTF, Chr$(34))
                    
                    If iEnd > 0 And (iCommaPlace = 0 Or iCommaPlace > iEnd) Then
                        sRow = Mid$(sRTF, iStart, iEnd - iStart)
                        sNewRow = GetCleanRow(sRow)
                        sRTF = Replace$(sRTF, sRow, 'cf' & iColor & ' ' & sNewRow & 'cf0', , , vbTextCompare)
                        iEnd = InStr(iStart, sRTF, vbNewLine)
                    End If
                    
                    
                    iStart = iEnd
                    
                Else
                
                    iStart = iStart + 1
                    
                End If 'Not hebrew letter
                
            End If 'iStart>0
            
        Loop Until iStart = 0
        
        .TextRTF = sRTF
        
    End With
    
 
End Sub
 
Private Sub ColorStrings(ByVal objRTF As RichTextLib.RichTextBox, ByVal wrd As String, ByVal color As Long)
 
    Dim i As Long
    Dim iStart As Long
    Dim iEnd As Long
    Dim iBreak As Long
    Dim sRTF As String
    Dim sRow As String
    Dim sNewRow As String
    Dim iColor As Long
    
    With objRTF
        
        sRTF = .TextRTF
        
        iStart = 1
        Do
            iStart = InStr(iStart, sRTF, wrd, vbTextCompare)
            If iStart > 0 Then
            
                'Check && update the color table
                iColor = SetColorTable(sRTF, color)
                
                iStart = InStr(iStart, sRTF, wrd, vbTextCompare)
                iEnd = InStr(iStart + 1, sRTF, wrd, vbTextCompare)
                iBreak = InStr(iStart + 1, sRTF, vbNewLine)
                
                If (iEnd > 0) And ((iBreak > iEnd) Or (iBreak = 0)) Then
                    
                    sRow = Mid$(sRTF, iStart, iEnd - iStart + 1)
                    'sNewRow = GetCleanRow(sRow)
                    sNewRow = sRow 'just for backward compatibility
                    sRTF = Replace$(sRTF, sRow, 'cf' & iColor & ' ' & sNewRow & 'cf0', , , vbTextCompare)
                    'iEnd = InStr(iStart, sRTF, vbNewLine)
                    ' ltrch  '20
                    
                    iEnd = InStr(iEnd + Len('cf' & iColor & ' ' & sNewRow & 'cf0') - Len(sNewRow), sRTF, wrd)
                End If
                
                
                iStart = iEnd
                
                
            End If 'iStart>0
            
        Loop Until iStart = 0
        
        .TextRTF = sRTF
        
    End With
    
 
End Sub
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.07.2011, 19:50
Ответы с готовыми решениями:

Возможно ли обращение к переменной с использованием значения строковой переменной?
Есть структура из 20ти различных элементов. Необходимо сформировать строковую переменную, которая бы содержала названия переменных и их...

Некорректное отображение переменной
Имеется переменная &quot;q&quot;, по нажатию на кнопку ее значение должно увеличиваться на 1 (так и происходит), но также это все должно выводиться...

Некорректное отображение переменной в программе
Добрый вечер. Помогите, пожалуйста, разобраться почему в указанной программе неправильно выводится переменная &quot;c&quot;. #include...

1
0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 8
05.07.2011, 22:21  [ТС]
Всем спасибо , разобрался. Причина: если оператор, требующий подстветки состоит из одной буквы, то имеем описанное выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.07.2011, 22:21
Помогаю со студенческими работами здесь

Парсинг значения строковой переменной с игнорированием символа
Такая задача - имеется строка, нужно парсить её (у меня парсинг с конца строки планируется, если есть разница в скорости обработки с начала...

Передача значения строковой переменной в следующие функции (консоль)
Вероятно плохо искал, раз не нашел. Потому что, как мне кажется, ничего сложного в этом быть не должно. Специально сделал простенький...

WxString(4 байта) некорректное отображение значения шестнадцатеричных значений
При отображении считанного MAC адреса в шестнадцатиричном виде(да и в десятичном тоже), в поле wxStaticText отображаются лишние символы,...

Использовать значение строковой переменной как имя новой переменной
Есть некий объект (ob = ) и строка (st =&quot;name&quot;). Так вот нужно, чтобы name стало именем объекта ob. То есть &gt;&gt;&gt;name ...

Как получить/установить значение переменной по названию (название берется из строковой переменной)
собственно сабж


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru