Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Подсветка кода, текста или тегов Добавлено: 02.07.05 00:34  

Автор вопроса:  dimoon | Web-сайт: dimoon.by.ru
Привет всем!

Кто нибудь знает способ сделать в программе подсветку кода для текста - выделение цветом определенных слов, тегов, ну в общем вы меня поняли :)
Я целый день бьюсь над этим сам - пришел к выводу, что на чистом VB такое сотворить нельзя. Т.е. сотворить то можно, и работает достаточно стабильно, но... медленно :( При длине текста от 10-20 кб начинает дико тормозить...
Так что приходится искать что то готовое... Решение интерисует абсолютно любое - RichTextBox, DHTML, ActiveX, source, class, etc etc... Лишь бы работало хорошо :)

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 02.07.05 01:13
RichTextBox служит исключительно для подсветки документа в формате RTF. Применять его для каких либо других целей бессмысленно.

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 02.07.05 03:37
Ускорить можно используя API RichTextBox, подсветку делать самому по БД операторов. Насколько будет тормознуто незнаю, хотя по идеи особо быть не должно

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 02.07.05 12:20
Если делать подсветку самому, то можно делать подсвечивание не каждый раз всего текста, а только изменённой части. А если текст сходу большой - то только видимую часть.

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 02.07.05 13:36
самое лучшее это вообще подсвечивать отображаемый кусок текста и не более :)

Ответить

Номер ответа: 5
Автор ответа:
 dimoon



Вопросов: 32
Ответов: 19
 Web-сайт: dimoon.by.ru
 Профиль | | #5
Добавлено: 02.07.05 14:00
Возможно я туплю, но...

как можно узнать, какой кусок текста в RTF в данный момент видим, а какой нет? Если делать расчет относительно scrollbar's, то ведь это гемор какой! еще надо учитывать размеры шрифта, размер самого контрола, и ... ужас :)

ну и даже если это как то можно сделать, то ведь если пользователь захочет подвигать скроллбары или понажимать pgup, то все равно придется перерисовывать весь текст...

так что имхо, выход тут один - посторонний контрол на Си. Вот только какой...целый день ищу, и пока безрезультатно... codemax не нравится.

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 02.07.05 14:53
Нет, ты не тупишь, ибо подсветка - это достаточно сложно...
Статья на wasm.ru

Ответить

Номер ответа: 7
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #7
Добавлено: 03.07.05 14:41
3 года назад делал курсовую - эмулятор станка с ЧПУ нужно было писать программу на ISO 7bit и рисовать что получилось в результате.
Как и наш президент большую часть времени пил пиво:)
Поэтому подсветку реализовал готовым activeXом по моему он назывался codesense или codemax ищи лучше через yahoo там есть (была) группа разработчиков.

Насколько он корректно себя ведет с большими текстами не знаю программки для ЧПУ сравнительно небольшие

cya
WaX

Ответить

Номер ответа: 8
Автор ответа:
 ⊗WaX⊗



Вопросов: 26
Ответов: 325
 Web-сайт: sapfir.cift.ru
 Профиль | | #8
Добавлено: 03.07.05 14:42
offtop 2 sne

Однако ты болтун 4110 постов :)

Ответить

Номер ответа: 9
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #9 Добавлено: 05.07.05 11:37
Так можно узнать номер первой видимой строки и сколько видно строк

Option Explicit
    Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
    Private Type TEXTMETRIC
        tmHeight As Long
        tmAscent As Long
        tmDescent As Long
        tmInternalLeading As Long
        tmExternalLeading As Long
        tmAveCharWidth As Long
        tmMaxCharWidth As Long
        tmWeight As Long
        tmOverhang As Long
        tmDigitizedAspectX As Long
        tmDigitizedAspectY As Long
        tmFirstChar As Byte
        tmLastChar As Byte
        tmDefaultChar As Byte
        tmBreakChar As Byte
        tmItalic As Byte
        tmUnderlined As Byte
        tmStruckOut As Byte
        tmPitchAndFamily As Byte
        tmCharSet As Byte
    End Type
    Private Const EM_GETRECT As Long = &HB2
    Private Const WM_GETFONT As Long = &H31
    Private Const EM_GETFIRSTVISIBLELINE As Long = &HCE
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
    Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
    Private Declare Function GetTextMetrics Lib "gdi32.dll" Alias "GetTextMetricsA" (ByVal hdc As Long, ByRef lpMetrics As TEXTMETRIC) As Long
    Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Sub Command1_Click()
    ;Dim rc As RECT
    ;Dim hdc As Long
    ;Dim lfont As Long
    ;Dim oldfont As Long
    ;Dim di As Long
    ;Dim tm As TEXTMETRIC
    ;Dim lc As Long
    lc = SendMessage(Text1.hwnd, EM_GETRECT, 0, rc)
    lfont = SendMessage(Text1.hwnd, WM_GETFONT, 0, 0&;)
    hdc = GetDC(Text1.hwnd)
    If lfont <> 0 Then oldfont = SelectObject(hdc, lfont)
    di = GetTextMetrics(hdc, tm)
    If lfont <> 0 Then lfont = SelectObject(hdc, oldfont)
    MsgBox "Первая строка - " & SendMessage(Text1.hwnd, EM_GETFIRSTVISIBLELINE, 0, 0&;) + 1 & Chr(10) & "Всего видно - " & (rc.Bottom - rc.Top) / tm.tmHeight
End Sub

Ответить

Номер ответа: 10
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 05.07.05 12:39
 Кстати, в RTB нужно каждое подсвечиваемое слово выделять отдельно. Мерцание лечится временным запретом перерисовки окна RTB. Но всё же советую поискать готовый контрол для этого дела. Да хоть сам в PictureBox'e создай.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам