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

или просто выделенный участок текста в красный цвет
RichTextBox1.SelColor = vbRed
...
Рейтинг: 0 / 0
15.12.2005, 15:05
    #33438393
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
ну тогда при наборе текста будет всегда выделяться текст "T", а мне надо, чтоюы курсор не сбивался. Как сделано в самом Бейсике: слова Private Sub или if then выделяются синим цветом, при этом пользователь продолжает набор
...
Рейтинг: 0 / 0
15.12.2005, 15:21
    #33438443
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
RichTextBox1.SelStart = Len(RichTextBox1.Text)
...
Рейтинг: 0 / 0
15.12.2005, 15:37
    #33438504
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
тогда курсор всегда переходит в конец поля и если я пишу где-то в центре, то курсор всегда будет перескакивать в конец
...
Рейтинг: 0 / 0
15.12.2005, 15:46
    #33438539
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
а все, разобрался, нужно просто в начале в переменную забивать SelStart, а потом возваращать ... другой вопрос: если я напишу T, он выделится красным, но и тогда весь текст дальше будет писаться красным ...
...
Рейтинг: 0 / 0
15.12.2005, 16:12
    #33438621
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
И еще, rich.find "t" будет находить и значит заменять только первую t, а если их в тексте много ?
...
Рейтинг: 0 / 0
15.12.2005, 16:22
    #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
15.12.2005, 16:33
    #33438675
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
протестировал этот код - у меня он не все слова находит, которые в тексте есть ...
...
Рейтинг: 0 / 0
15.12.2005, 16:38
    #33438687
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
так, ну у меня он выделяет теперь все, что надо, но все же когда я напишу слово, которые надо выделить он начинает так же выделять и все следующие слова ...
...
Рейтинг: 0 / 0
16.12.2005, 07:39
    #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
16.12.2005, 15:50
    #33441208
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
Я сделал по другому: цвет пробела и ентера - черный
...
Рейтинг: 0 / 0
17.12.2005, 01:20
    #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
19.12.2005, 07:54
    #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
19.12.2005, 14:48
    #33444329
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
сделал, как ты сказал, слова, которые должны менять цвет постоянно мигают и писать невозможно
...
Рейтинг: 0 / 0
19.12.2005, 15:17
    #33444425
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
посмотри мой проэкт он работает нормально
меня только смущает что если слово
or ключевое то в слове orbita выделяет or цветом
надо найти альтернативу InStr он находит строки в строке
или в поиск забить "or " с пробелом но еще проблема понимает после двух пробелов решение есть времени нету на это пока
Отпишись по поводу
...
Рейтинг: 0 / 0
19.12.2005, 19:23
    #33445123
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
После нажатия пробела или ентера, или бекспейса, если много слов, все равно лагает :(
...
Рейтинг: 0 / 0
22.12.2005, 14:56
    #33452216
GadenbIsh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
Есть еще какие-нибудь идеи, как граммотно выделять цветами слова ?
...
Рейтинг: 0 / 0
22.12.2005, 15:09
    #33452281
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом определенных слов
Не пробовал еще нет времени
но есть идея
функция начианет поиск всех записей в тексте
надо задать поиск и последующее изменение текста не всего текста
а символов которые начинаются с пробела к примеру
слово1 слово2 слово3 слово4

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


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