0 / 0 / 0
Регистрация: 01.07.2011
Сообщений: 8

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

05.07.2011, 19:50. Показов 1237. Ответов 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): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru