Страница: 1 |
Страница: 1 |
Вопрос: Подсветка синтаксиса & перекодировка
Добавлено: 26.11.05 20:16
Автор вопроса: Sacred Phoenix | ICQ: 304238252
Знает ли кто-нить быстрые алгоритмы подсветки синтаксиса (в RichTextBox) и перекодировки текста (CharToOem и OemToChar не предлагать - текст нужно переводить и в KOI, и в ISO и т.д.)?
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #1
Добавлено: 26.11.05 23:54
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
ByVal CodePage As Int32, _
ByVal dwFlags As Int32, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Int32, _
ByVal lpWideCharStr As String, _
ByVal cchWideChar As Int32) As Int32
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
ByVal CodePage As Int32, _
ByVal dwFlags As Int32, _
ByVal lpWideCharStr As String, _
ByVal cchWideChar As Int32, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Int32, _
ByVal lpDefaultChar As String, _
ByVal lpUsedDefaultChar As Int32) As Int32
Номер ответа: 2
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #2
Добавлено: 26.11.05 23:55
тьфу ты.. спутал...
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As String, _
ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As String, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, _
ByVal lpDefaultChar As String, _
ByVal lpUsedDefaultChar As Long) As Long
Номер ответа: 3
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #3
Добавлено: 27.11.05 10:40
1) А что делать с подсветкой синтаксиса? (н-р, так, как это делает MetaProducts WebStudio, если кто знает)
2) Гы, щас посмотрим...
Номер ответа: 4
Автор ответа:
AndreyMp
ICQ: 237822510
Вопросов: 28
Ответов: 1182
Профиль | | #4
Добавлено: 27.11.05 11:09
2. Ну сколько раз уже выкладывал. Не на одном форуме!Может в примеры кто оформит.
Option Explicit
Enum idCodePage
Win = 1251
 os = 866
Koi = 20866
Iso = 28595
End Enum
Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, _
ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Public Function ConvertCodePage(SourseString As String, inPage As idCodePage, outPage As idCodePage) As String
Dim LenSourseString As Long
Dim strFirst As String
Dim strSecond As String
Dim RetStrLong As Long
LenSourseString = Len(SourseString)
strFirst = String(LenSourseString * 2, Chr(0))
strSecond = String(LenSourseString * 2, Chr(0))
RetStrLong = MultiByteToWideChar(inPage, &H1, SourseString, LenSourseString, StrPtr(strFirst), LenSourseString)
RetStrLong = WideCharToMultiByte(outPage, 0, StrPtr(strFirst), RetStrLong, strSecond, LenSourseString * 2, ByVal 0, 0)
ConvertCodePage = Left(strSecond, RetStrLong)
End Function
Номер ответа: 5
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #5
Добавлено: 27.11.05 11:16
2 AndreyMp: thz! А ты знаешь какие-нибудь еще Codepages? Или где их узнать?
1) подсветка синтаксиса остается...
Номер ответа: 6
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #6
Добавлено: 27.11.05 11:25
Вопрос снят, сам на MSDN нашел
Номер ответа: 7
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #7
Добавлено: 27.11.05 11:55
Private Sub Command1_Click()
Dim txt As String
Dim tag_open As Integer
Dim tag_close As Integer
On Error GoTo eds
txt = rtf1.Text
tag_close = 1
Do
' Начало тега
tag_open = InStr(tag_close, txt, "<"
If tag_open = 0 Then Exit Do
' Где конец тега
tag_close = InStr(tag_open, txt, ">"
If tag_open = 0 Then tag_close = Len(txt)
' Подсветить
rtf1.SelStart = tag_open - 1
rtf1.SelLength = tag_close - tag_open + 1
rtf1.SelColor = vbBlue
rtf1.SelUnderline = True
Loop
eds:
End Sub
- вообще это для подсветки html тегов, но я думаю ты и так разберешся..
Когда-то я тоже подобный пост оставлял
Номер ответа: 8
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #8
Добавлено: 27.11.05 14:58
Он, imho, медленный. Фишка в том, что нужен "Realtime", то бишь ввел символ, а он уже раскрасился в нужный цвет, в зависимости от того, тег это, параметр или значение.
Номер ответа: 9
Автор ответа:
Dushes
ICQ: 249195431
Вопросов: 8
Ответов: 110
Профиль | | #9
Добавлено: 28.11.05 08:12
Я сталкивался с такой проблемой. Решение было таким -
1) делить весь текст на строки, потом при изменение RichTextBox проверять какая строка сменилась и ее прорисовывать. Но наверно это не лучший вариант. Поскольку при вставке большого объема текста прорисовка встает во всем известную позицию - подвисает.
2) я ставил перехват сообщений на hwnd RichTextBox, и в момент прорисовки я перехватывал сообщений WM_DRAW. То есть сначала делал синтаксис, а потом прорисовывал.
Номер ответа: 10
Автор ответа:
Dushes
ICQ: 249195431
Вопросов: 8
Ответов: 110
Профиль | | #10
Добавлено: 28.11.05 08:14
Простите, не WM_DRAW, а WM_PAINT...
Номер ответа: 11
Автор ответа:
GigaZiv
ICQ: 335510202
Вопросов: 1
Ответов: 6
Профиль | | #11
Добавлено: 28.11.05 19:41
Синтаксис это не проблема
На нашем проекте, был такой вопрос. Код очень большой, вышлю на маил. Ответте какие контролы будут на форме. И какие правила синтаксиса. Например:
Оператор Call hDocWin.vSetTextBox()
.vSetTextBox() - точка слева
.vSetTextBox() - скобка справа
и т.д.
Но все это описывается в правилах. Производительность хорошая. С уважением Игорь
Номер ответа: 12
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #12
Добавлено: 28.11.05 20:56
Контрол RTB As RichTextBox. Правила синтаксиса: VB, если получится - HTML, JAVA, CSS.
Номер ответа: 13
Автор ответа:
Dushes
ICQ: 249195431
Вопросов: 8
Ответов: 110
Профиль | | #13
Добавлено: 29.11.05 11:19
А если бы Firebird образец этого кода выложил в базу кодов, был бы очень признателен...