Вкраце, ( ПРОШУ НЕ ОСТАВИТЬ БЕЗ ВНИМАНИЯ )
Работаю в Аксесс 2002
при вводе в RichTextBox 4000 строк, поиске и выделении красным цветом одного слова- хорошая машина выполняет задание 2,5 часа -(((((((. поиск произвожу при помощи instr () {код ниже}
Да, причём, производительность падает по экспоненте в зависимости от введенного текста.
Простое выделение текста ,без поиска происходит так же медленно ,как и поиск...
пример: выделение в 32762 символах (200 строк) по 4 символа, пропуск и заного 4 символа (5471 раз) занимает 3 мин 46 сек
как вы понимаете- никуда не годится...
вопросы:
1 Как повысить производительность ???
2 в экселе или в ворде воиск и выделение не будет ли наботать быстрее?? (а потом перекинуть в ричтекстбокс)
3 метод find работает быстрее instr Я идиот! Убейте меня, кто-нибудь!?
не работает такая строка
indexToText = RichTextBox1.Find(Text, start, RichTextBoxFinds.MatchCase)
ругается на RichTextBoxFinds.MatchCase
работает такая строка но не совсем правильно
lWhere = RichTextBox1.Find("кабел", 0, , rtfNoHighlight)
4 при выполнении скрытия и появление контролла- он перезагружается..-((( (как будто срабатывает событие лоад...)
Private Sub Кнопка13_Click()
Me.RichTextBox1.Value = Me.Поле9.Value
End Sub
Private Sub Кнопка14_Click()
Me.RichTextBox1.Visible = False
End Sub
вообще скрытие контролла поможет увеличить производительность??
Скажите как быть ,проблема очень актуальна! бъюсь не один день....
код моего поиска
Private Sub Кнопка1_Click()
Dim lWhere, lPos As Long
Dim sTmp, sSearch, t As String
Dim dn, dk, dr As Date
lPos = 1
dn = Time
'Здесь вы можете указать слово для поиска и замены
sSearch = "кабел"
'поиск по всему тексту
Do While lPos < Len(Me.RichTextBox1.text)
sTmp = Mid(Me.RichTextBox1.text, lPos, Len(Me.RichTextBox1.text))
Debug.Print Len(Me.RichTextBox1.text)
lWhere = InStr(sTmp, sSearch)
lPos = lPos + lWhere
If lWhere Then 'если строка для поиска найдена
Me.RichTextBox1.SelStart = lPos - 2 'установить начало выделения
Me.RichTextBox1.SelLength = Len(sSearch) 'установить длину выделения
'Me.RichTextBox1.Object.SelColor = RGB(255, 0, 0) 'изменить цвет выделения красным цветом
Me.RichTextBox1.SelColor = RGB(255, 0, 0) 'изменить цвет выделения красным цветом
'Выделить текст жирным шрифтом
'RichTextBox1.SelBold = True
'Выделить текст курсивом
'RichTextBox1.SelItalic = True
'Выделить текст подчеркнутым шрифтом
'RichTextBox1.SelUnderline = True
'Просмотр текста в виде простого текста
'MsgBox RichTextBox1.Text
'Просмотр текста в виде RTF
'MsgBox RichTextBox1.TextRTF
Else
Exit Do
End If
Loop
dk = Time
dr = dk - dn
MsgBox dn & " , " & dk & " разница" & dr
End Sub
или
Private Sub Кнопка4_Click()
Dim lPos, lPos1 As Long
Dim Length_word, i As Integer
Dim txt, sSearch As String
lPos = 1
lPos1 = 0
i = 0
'Здесь вы можете указать слово для поиска и замены
sSearch = "кабел"
txt = Me.RichTextBox1.text
'длина всего текста
'Length_text = Len(Me.RichTextBox1.Text)
'длина всего текста
Length_word = Len(sSearch)
'поиск по всему тексту
Do
i = i + 1
lPos = InStr(lPos, txt, sSearch)
If i = 1 Then
lPos1 = lPos
End If
If i <> 1 And lPos <= lPos1 + Length_word Then
Exit Do
End If
Me.RichTextBox1.SelStart = lPos 'установить начало выделения
Me.RichTextBox1.SelLength = Length_word 'установить длину выделения
lPos = lPos + Length_word
Me.RichTextBox1.SelColor = RGB(255, 0, 0) 'изменить цвет выделения красным цветом
Loop Until lPos = 0
End Sub