|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
Как сделать в RichTextBox так, чтоб некоторые слова выделялись определенным цветом ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2005, 19:32 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
Находит букву Т и выводит красным цветом RichTextBox1.Find "T" RichTextBox1.SelColor = vbRed или просто выделенный участок текста в красный цвет RichTextBox1.SelColor = vbRed ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 07:08 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
ну тогда при наборе текста будет всегда выделяться текст "T", а мне надо, чтоюы курсор не сбивался. Как сделано в самом Бейсике: слова Private Sub или if then выделяются синим цветом, при этом пользователь продолжает набор ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 15:05 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
RichTextBox1.SelStart = Len(RichTextBox1.Text) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 15:21 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
тогда курсор всегда переходит в конец поля и если я пишу где-то в центре, то курсор всегда будет перескакивать в конец ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 15:37 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
а все, разобрался, нужно просто в начале в переменную забивать SelStart, а потом возваращать ... другой вопрос: если я напишу T, он выделится красным, но и тогда весь текст дальше будет писаться красным ... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 15:46 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
И еще, rich.find "t" будет находить и значит заменять только первую t, а если их в тексте много ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 16:12 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
Попробуй этот готовый код 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 'Работает по массиву найденных слов и выделяет красным, а что бы подправить под твои параметры сам разбери код под себя ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 16:22 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
протестировал этот код - у меня он не все слова находит, которые в тексте есть ... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 16:33 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
так, ну у меня он выделяет теперь все, что надо, но все же когда я напишу слово, которые надо выделить он начинает так же выделять и все следующие слова ... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2005, 16:38 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
По экспериментировал с этим кодом получилось следующее выделяет то что нужно и по массиву нужных значений я использовал коды 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 -будут голубым цветом 'отпишись по поводу ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2005, 07:39 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
Я сделал по другому: цвет пробела и ентера - черный ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2005, 15:50 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
вот мой конечный код: 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 Как видите слишком много слов ему приходится выделять при каждом нажатии кнопки и поэтому прога очень сильно лагает, как быть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2005, 01:20 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
цвет в функции вывести в переменную 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2005, 07:54 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
сделал, как ты сказал, слова, которые должны менять цвет постоянно мигают и писать невозможно ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2005, 14:48 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
посмотри мой проэкт он работает нормально меня только смущает что если слово or ключевое то в слове orbita выделяет or цветом надо найти альтернативу InStr он находит строки в строке или в поиск забить "or " с пробелом но еще проблема понимает после двух пробелов решение есть времени нету на это пока Отпишись по поводу ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2005, 15:17 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
После нажатия пробела или ентера, или бекспейса, если много слов, все равно лагает :( ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2005, 19:23 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
Есть еще какие-нибудь идеи, как граммотно выделять цветами слова ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2005, 14:56 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
Не пробовал еще нет времени но есть идея функция начианет поиск всех записей в тексте надо задать поиск и последующее изменение текста не всего текста а символов которые начинаются с пробела к примеру слово1 слово2 слово3 слово4 функция должна искать не все слова а последнее слово в тексте условие примерно так надо подсчитать последние символы до пробела в обратно порядке (определить последнее слово) пробелслово4 это будет у нас последнее слово а диапазон поиска в функции (Box.Text) сократить до последнего слова а событие поменять на change в этом случае не будет циклится по всему тексту и будет находить быстрее это все идея пробовать пока нет возможности если чем то помог, желаю удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2005, 15:09 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
Я тоже ищу решение для постороннего ПО по закраске синтакса, Этот подход не приемлем даже исходя из того, что при больших обемах текста программы - начинать поиск с самого начало текста нет смысла !!! Лучше было бы если производилась разборка по отдельным строкам ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2005, 09:11 |
|
Выделение цветом определенных слов
|
|||
---|---|---|---|
#18+
У меня вот появилась идея ... Как взять номер строки, где нахожится указатель ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2005, 19:54 |
|
|
start [/forum/topic.php?fid=60&tid=2157011]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 156ms |
0 / 0 |