powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выделение цветом определенных слов
22 сообщений из 22, страница 1 из 1
Выделение цветом определенных слов
    #33436636
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать в RichTextBox так, чтоб некоторые слова выделялись определенным цветом ?
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33437026
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Находит букву Т и выводит красным цветом
RichTextBox1.Find "T"
RichTextBox1.SelColor = vbRed

или просто выделенный участок текста в красный цвет
RichTextBox1.SelColor = vbRed
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438393
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну тогда при наборе текста будет всегда выделяться текст "T", а мне надо, чтоюы курсор не сбивался. Как сделано в самом Бейсике: слова Private Sub или if then выделяются синим цветом, при этом пользователь продолжает набор
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438443
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RichTextBox1.SelStart = Len(RichTextBox1.Text)
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438504
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тогда курсор всегда переходит в конец поля и если я пишу где-то в центре, то курсор всегда будет перескакивать в конец
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438539
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а все, разобрался, нужно просто в начале в переменную забивать SelStart, а потом возваращать ... другой вопрос: если я напишу T, он выделится красным, но и тогда весь текст дальше будет писаться красным ...
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438621
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще, rich.find "t" будет находить и значит заменять только первую t, а если их в тексте много ?
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438643
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй этот готовый код Command1, RichTextBox1


Private Sub Form_Load()

RichTextBox1.LoadFile "c:\licence.txt" здесь поставь какой нибудь свой файл или лицензию какую нибудь с программ

End Sub

Private Sub Command1_Click()

Dim strval As String 'Inputbox returns a string
Dim nStrings As Long

'Reload the file to undo the previous selections
'Edit the following line to point to your license.txt or another
'text file

RichTextBox1.LoadFile "c:\licence.txt" ' то же здесь

'Ask the user what string to find. Defaults to finding all
'occurrences of the word "the." In this example, you are
'concatenating spaces onto each end of the search string to
'prevent the FindIt routine from finding occurrences of the
'search string within other words, ie; finding "the" in "there"
'or "these." If you want to find the string within other strings,
'simply eliminate the concatenation.

strval = " " & InputBox("Enter the string to find.", "Findit", _
"the") & " "

If strval <> "" Then

'the user didn't click cancel call the FindIt routine
'and pass it the

nStrings = FindIt(RichTextBox1, strval)
MsgBox (Str$(nStrings) & " instances found.")
End If

End Sub

'********************************************************************
'Findit takes three arguments; two required, and one optional. The
'required arguments, Box and Srch, are a RichTextBox object and a
'string to search for. The optional argument, Start, is a Long
'integer that is used in the recursive calls.
'********************************************************************

Private Function FindIt(Box As RichTextBox, Srch As String, _
Optional Start As Long)

Dim retval As Long 'Instr returns a long
Dim Source As String 'variable used in Instr

Source = Box.Text 'put the text to search into the variable

If Start = 0 Then Start = 1 'the initial call doesn't pass a value
'for Start, so it will equal 0

retval = InStr(Start, Source, Srch) 'do the first search,
'starting at the beginning
'of the text

If retval <> 0 Then 'there is at least one more occurrence of
'the string

'the RichTextBox doesn't support multiple active selections, so
'this section marks the occurrences of the search string by
'making them Bold and Red

With Box
.SelStart = retval - 1
.SelLength = Len(Srch)
.SelColor = vbRed
.SelBold = True
.SelLength = 0 'this line removes the selection
'highlight
End With

Start = retval + Len(Srch) 'move the starting point past the
'first occurrence

'FindIt calls itself with new arguments
'this is what makes it Recursive
FindIt = 1 + FindIt(Box, Srch, Start)
End If
End Function


'Работает по массиву найденных слов и выделяет красным, а что бы подправить под твои параметры сам разбери код под себя
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438675
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
протестировал этот код - у меня он не все слова находит, которые в тексте есть ...
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33438687
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так, ну у меня он выделяет теперь все, что надо, но все же когда я напишу слово, которые надо выделить он начинает так же выделять и все следующие слова ...
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33439673
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По экспериментировал с этим кодом
получилось следующее
выделяет то что нужно и по массиву нужных значений я использовал коды SQL для поля sql скрипта

совет не используй Change а используй KeyPress при пробеле и при энтре

Private Sub RichTextBox1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeySpace Or KeyAscii = 13 Then
FindW
RichTextBox1.SelStart = Len(RichTextBox1.Text)
RichTextBox1.SelColor = vbBlack
Else
RichTextBox1.SelColor = vbBlack
End If
End Sub



'Далле функция

Private Function FindIt(Box As RichTextBox, Srch As String, _
Optional start As Long)

Dim retval As Long
Dim Source As String

Source = Box.Text
If start = 0 Then start = 1
retval = InStr(start, Source, Srch)

If retval <> 0 Then
With Box
.SelStart = retval - 1
.SelLength = Len(Srch)
.SelColor = vbBlue
.SelBold = True
.SelLength = 0
End With

start = retval + Len(Srch)
FindIt = 1 + FindIt(Box, Srch, start)

End If
End Function
'далле проца

Private Sub FindW()
Dim i As Long
Dim strval(10) As String 'массив заполнения параметров поиска
Dim nStrings As Long


strval(0) = "select" 'заполнение в массив параметров поиска
strval(1) = "from"
strval(2) = "where"

' итд..... до десяти
For i = 0 To 10
If strval(i) <> "" Then
nStrings = FindIt(RichTextBox1, strval(i)) ' поиск и выделение парметров
End If
Next i
End Sub


'попробуй ввести select или from или where -будут голубым цветом
'отпишись по поводу
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33441208
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал по другому: цвет пробела и ентера - черный
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33442137
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот мой конечный код:

s = telo.SelStart

Dim i As Integer

For i = 0 To Combo3.ListIndex
Findit telo, Combo3.List(i), vbYellow, True
telo.SelStart = s
Next

telo.Find telo.Text
telo.SelColor = vbBlack
telo.SelBold = 0
telo.SelStart = s

Findit telo, "{", vbBlue, True
telo.SelStart = s

Findit telo, " ", vbBlack, False
telo.SelStart = s

Findit telo, ":", vbBlack, False
telo.SelStart = s

Findit telo, vbCrLf, vbBlack, False
telo.SelStart = s

Findit telo, "}", vbBlue, True
telo.SelStart = s

Findit telo, "proc", vbBlue, True
telo.SelStart = s

Findit telo, "global", vbGreen, True
telo.SelStart = s

Findit telo, "[", vbYellow, True
telo.SelStart = s

Findit telo, "]", vbYellow, True
telo.SelStart = s

Findit telo, "expr", vbYellow, True
telo.SelStart = s

Findit telo, "incr", vbYellow, True
telo.SelStart = s

Findit telo, "putserv", vbYellow, True
telo.SelStart = s

Findit telo, "putlog", vbYellow, True
telo.SelStart = s

Findit telo, "puthelp", vbYellow, True
telo.SelStart = s

Findit telo, "putmsg", vbYellow, True
telo.SelStart = s

Findit telo, "putdcc", vbYellow, True
telo.SelStart = s

Findit telo, "puts", vbYellow, True
telo.SelStart = s

Findit telo, "get", vbYellow, True
telo.SelStart = s

Findit telo, "gets", vbYellow, True
telo.SelStart = s

Findit telo, "return", vbMagenta, True
telo.SelStart = s

Findit telo, "regsub", vbMagenta, True
telo.SelStart = s

Findit telo, "all", vbMagenta, True
telo.SelStart = s

Findit telo, "channel", vbRed, True
telo.SelStart = s

Findit telo, "-", vbMagenta, True
telo.SelStart = s

Findit telo, "-nocase", vbMagenta, True
telo.SelStart = s

Findit telo, "while", vbMagenta, True
telo.SelStart = s

Findit telo, "for", vbMagenta, True
telo.SelStart = s

Findit telo, "if", vbMagenta, True
telo.SelStart = s

Findit telo, "else", vbMagenta, True
telo.SelStart = s

Findit telo, "lindex", vbYellow, True
telo.SelStart = s

Findit telo, "rand", vbYellow, True
telo.SelStart = s

Findit telo, "llength", vbYellow, True
telo.SelStart = s

Findit telo, ";", vbMagenta, True
telo.SelStart = s

Findit telo, Chr(34), vbBlue, False
telo.SelStart = s

Findit telo, "chan", vbRed, False
telo.SelStart = s
Findit telo, "text", vbRed, False
telo.SelStart = s
Findit telo, "params", vbRed, False
telo.SelStart = s
Findit telo, "nick", vbRed, False
telo.SelStart = s
Findit telo, "uhost", vbRed, False
telo.SelStart = s
Findit telo, "args", vbRed, False
telo.SelStart = s
Findit telo, "hand", vbRed, False
telo.SelStart = s
Findit telo, "$", vbRed, True
telo.SelStart = s

Findit telo, "set", vbRed, True
telo.SelStart = s

Findit telo, "close", vbRed, True
telo.SelStart = s


Как видите слишком много слов ему приходится выделять при каждом нажатии кнопки и поэтому прога очень сильно лагает, как быть ?
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33443307
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
цвет в функции вывести в переменную col

Private Function FindIt(Box As RichTextBox, Srch As String, col , _
Optional start As Long)

DoEvents
Static retval As Long
Dim retvalnon As Long
Dim Source As String

Source = Box.Text

If start = 0 Then start = 1
retval = InStr(start, Source, Srch)
retvalnon = InStr(start, Source, Srch)
If retval <> 0 Then

With Box
.SelStart = retval - 1
.SelLength = Len(Srch)
.SelColor = col
.SelBold = True
.SelLength = 0
End With
start = retval + Len(Srch)
FindIt = 1 + FindIt(Box, Srch, col, start)

End If
End Function

в массиве сгруппировать слова по порядку взависимости от цвета
Private Sub FindW()
Dim i As Long
Dim strval(20) As String
Dim nStrings As Long

DoEvents
strval(0) = "select"
strval(1) = "from"
strval(2) = "where"
strval(3) = "and"
strval(4) = "or"
strval(5) = "between"
strval(6) = "in"
strval(7) = "order by"
For i = 0 To 5
If strval(i) <> "" Then
nStrings = FindIt(RichTextBox1, strval(i), vbBlue )
End If
Next i

For i = 6 To 7
If strval(i) <> "" Then
nStrings = FindIt(RichTextBox1, strval(i), vbRed )
End If
Next i
End Sub


в событии поиска



Private Sub RichTextBox1_KeyPress(KeyAscii As Integer)
Dim cursor As Long
If KeyAscii = 13 Or KeyAscii = vbKeySpace Or KeyAscii = vbKeyBack Then
cursor = RichTextBox1.SelStart
With
.SelStart = 0
.SelLength = Len(.Text) ' очистить до поиска весь формат цветов
.SelColor = vbBlack
.SelLength = 0
End With

FindW
RichTextBox1.SelStart = cursor
RichTextBox1.SelColor = vbBlack
RichTextBox1.SetFocus ' после поиска писать обычным текстом

End If
End Sub
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33444329
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал, как ты сказал, слова, которые должны менять цвет постоянно мигают и писать невозможно
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33444425
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
посмотри мой проэкт он работает нормально
меня только смущает что если слово
or ключевое то в слове orbita выделяет or цветом
надо найти альтернативу InStr он находит строки в строке
или в поиск забить "or " с пробелом но еще проблема понимает после двух пробелов решение есть времени нету на это пока
Отпишись по поводу
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33445123
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
После нажатия пробела или ентера, или бекспейса, если много слов, все равно лагает :(
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33452216
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще какие-нибудь идеи, как граммотно выделять цветами слова ?
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33452281
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пробовал еще нет времени
но есть идея
функция начианет поиск всех записей в тексте
надо задать поиск и последующее изменение текста не всего текста
а символов которые начинаются с пробела к примеру
слово1 слово2 слово3 слово4

функция должна искать не все слова а последнее слово в тексте
условие примерно так
надо подсчитать последние символы до пробела в обратно порядке (определить последнее слово)
пробелслово4 это будет у нас последнее слово
а диапазон поиска в функции (Box.Text) сократить до последнего слова
а событие поменять на change
в этом случае не будет циклится по всему тексту и будет находить быстрее
это все идея пробовать пока нет возможности
если чем то помог, желаю удачи
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33453512
Valeriu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже ищу решение для постороннего ПО по закраске синтакса,
Этот подход не приемлем даже исходя из того, что при больших обемах
текста программы - начинать поиск с самого начало текста нет смысла !!!
Лучше было бы если производилась разборка по отдельным строкам
...
Рейтинг: 0 / 0
Выделение цветом определенных слов
    #33456403
GadenbIsh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня вот появилась идея ...
Как взять номер строки, где нахожится указатель ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Выделение цветом определенных слов
    #38241299
Abisma2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выделение цветом определенных слов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]