Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 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
    ;Dos = 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
А ты знаешь какие-нибудь еще Codepages? Или где их узнать?

Вопрос снят, сам на MSDN нашел :)

Ответить

Номер ответа: 7
Автор ответа:
 «UL.eXe»



ICQ: 197.895.916.247 

Вопросов: 72
Ответов: 540
 Профиль | | #7 Добавлено: 27.11.05 11:55
подсветка синтаксиса остается... :)


Option Explicit
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 образец этого кода выложил в базу кодов, был бы очень признателен...

Ответить

Страница: 1 |

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



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