Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Вопрос по RichTextBox знатокам API Добавлено: 16.09.08 17:32  

Автор вопроса:  mzx | ICQ: 259560026 
Надежды мало, но мож кто сталкивался.

Нужно получать символы из RichTextBox сообщением EM_GETLINE
Исходный код не мой. Работает прекрасно, НО только с латиницей. Вместо кириллических символов возвращает кракозябры. Что EM_GETLINE в принципе не возвращает сиволы с кодом выше 127 ?

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const EM_GETLINE = &HC4

Public Property Get Line(lngLine As Long) As String
    ' When sending the EM_GETLINE message
    ' the lParam is a pointer to a buffer that will hold
    ' the returned line of text.
    ' The first word(16 bits) of this buffer contain the
    ' number of characters to return.  So we can set the
    ' number of characters to return a Byte array is used
    Dim bReturnedLineBuffer() As Byte
    Dim LengthOfLine As Long ' length of the line
    Dim LineStart As Long

    LineStart = LineStartPos(LineIndex)
    If LineStart = -1 Then Exit Function
    
    LengthOfLine = LineLength(LineStart)
    If LengthOfLine < 1 Then Exit Function
    
    'Resize the byte array
    ReDim bReturnedLineBuffer(LengthOfLine)

    'Save the length in the first word of the array
    'A Word is two bytes so split the length up
    bReturnedLineBuffer(0) = LengthOfLine And 255
    bReturnedLineBuffer(1) = LengthOfLine \ 256

    SendMessage rich.hwnd, EM_GETLINE, LineIndex, bReturnedLineBuffer(0)
    
    'Make the byte array a string and return it
    Line = Left$(StrConv(bReturnedLineBuffer, vbUnicode), LengthOfLine)

End Property

Ответить

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

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 16.09.08 17:43
  1. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  2. Private Const EM_GETLINE = &HC4
  3.  
  4. Private Sub Command1_Click()
  5.  
  6.     ' When sending the EM_GETLINE message
  7.     ' the lParam is a pointer to a buffer that will hold
  8.     ' the returned line of text.
  9.     ' The first word(16 bits) of this buffer contain the
  10.     ' number of characters to return.  So we can set the
  11.     ' number of characters to return a Byte array is used
  12.     Dim bReturnedLineBuffer() As Byte
  13.     Dim LengthOfLine As Long ' length of the line
  14.     Dim LineStart As Long
  15. lineindex = 2
  16.     'LineStart = LineStartPos(LineIndex)
  17.     'If LineStart = -1 Then Exit Function
  18.      
  19.     'LengthOfLine = LineLength(LineStart)
  20.     'If LengthOfLine < 1 Then Exit Function
  21.      LengthOfLine = 255
  22.     'Resize the byte array
  23.     ReDim bReturnedLineBuffer(LengthOfLine)
  24.  
  25.     'Save the length in the first word of the array
  26.     'A Word is two bytes so split the length up
  27.     bReturnedLineBuffer(0) = LengthOfLine And 255
  28.     bReturnedLineBuffer(1) = LengthOfLine \ 256
  29.  
  30.     SendMessage rich.hwnd, EM_GETLINE, lineindex, bReturnedLineBuffer(0)
  31.      
  32.     'Make the byte array a string and return it
  33.     Line11 = Left$(StrConv(bReturnedLineBuffer, vbUnicode), LengthOfLine)
  34.  
  35. End Sub

Замутил RTB на форме, аписал текст, смотрю в переменную Line11 - все нормально, русский текст есть...

Ответить

Номер ответа: 2
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #2
Добавлено: 16.09.08 18:06
mzx может у тебя проблема виндой например у меня русский текст в некоторых програмах тоже не отображалса .Спасиба ZagZag дал *.reg файлик после выполнения какого всё стало на свои места

Ответить

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



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #3
Добавлено: 16.09.08 18:37
Да, попробуй кодовую страницу 1252 на 1251 заменить

Ответить

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



ICQ: 259560026 

Вопросов: 21
Ответов: 143
 Профиль | | #4 Добавлено: 17.09.08 10:05
Спасибо всем за ответы. Наверное я некорректно задал вопрос, но проблема остается.
Вот здесь пример из которого понятно, что я имею в виду: http://www.bousoft.com/ocx/codehighlight.zip
Можете сами убедиться на счет кириллических символов.

Я этот класс использую в своей проге SQLManager. С синтаксисом SQL все в порядке, но если нужно русские слова в запросе использовать - жопа.

Ответить

Страница: 1 |

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



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