Получить построчно текст из RTB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Получить построчно текст из RTB

Сообщение Ruslan Demidow » 12.03.2005 (Сб) 11:53

Вот, понадобилось мне из RichTextBox (в дальнейшем RTB) построчно получить текст.
Думется нет ничего проще.
Есть функция которая получает через посылку сообщений EM_GETLINE RTB. С английским языком всё нормально. Могу получить любую строку, но вот с русским текстом всё сложнее. Возвращает абракадабру вместо русских слов и букв.
Почему, не пойму. Как побороть - тоже не знаю. :oops:
Может подскажет кто-нибудь?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 12.03.2005 (Сб) 13:40

а может попробовать искать символ конца строки??? ( vbCrLF ) если что...
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 12.03.2005 (Сб) 13:40

а RTB твой?, ну тоесть он у тебя на форме лежит или в другой проге?
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Alex Mals
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 11.12.2004 (Сб) 18:09

Сообщение Alex Mals » 12.03.2005 (Сб) 18:44

Решения не знаю, но есть две версии, попробуй
1. StrConv vbUnicode и обратно
2. послать EM_SETTEXTMODE с параметром ... or TM_SINGLECODEPAGE,
помогает в некоторых случаях получить русский текст вместо всякого г...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 12.03.2005 (Сб) 21:46

Jenizix писал(а):а может попробовать искать символ конца строки??? ( vbCrLF ) если что...

Нет, это не пройдёт.
Текст в RTB может быть отформатирован по разному в разных строках (выравнивание по левому, правому краю или по центру).
Если забирать просто текст - то не будет понятно какая строка как отформатирована.
У меня задумка такая: забираю одну строку текста из RTB. Смотрю как эта строка отформатирована (это легко. Ведь пожно найти эту строку в RTB и посмотреть .SelAlignment). После этого програмными средствами форматируем строку текста так как нам надо (убираем или добавляем пробелы там где надо). И сохраняем обычный, но уже отформатированный текст.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 12.03.2005 (Сб) 21:46

Jenizix писал(а):а RTB твой?, ну тоесть он у тебя на форме лежит или в другой проге?

RTB мой. Лежит у меня на форме.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 12.03.2005 (Сб) 21:55

Alex Mals писал(а):Решения не знаю, но есть две версии, попробуй
1. StrConv vbUnicode и обратно

Пробовал. Нифига.
Вот исходный текст.
=========================
Пpивет Ivan,
01 маp 2005 ты писал(а) по поводу *эха жива?. *
IS>Здpавия желаю Ruslan
AV>>>>>>>А что это у тебя в тиpлайне за базе pидеp такой завёлся?
RD>>>>>> Да так... Звеpёк домашний... ;)
=========================

А вот тот текст, что я получаю на выходе
=========================
p825B Ivan,
01 <0p 2005 BK ?8A0;(0) ?> ?>2>4C *ME0 6820?. *
IS>4p028O 65;0N Ruslan
AV>>>>>>> GB> MB> C B51O 2 B8p;09=5 70 1075 p845p B0:>9 702Q;AO?
RD>>>>>> 0 B0:... 25pQ: 4><0H=89... ;)
==========================

А вот процедура, которая возвращает мне текст из RTB
Код: Выделить всё
Function GetText() As String
    Dim s As String
    Dim nLen As Long
    Dim nChar As Long
    Dim LinesCount As Long
    Dim i As Long, sTemp As String
    Const nLine = 2
LinesCount = SendMessage(RTBedit.hwnd, EM_GETLINECOUNT, &O0, &O0)
If LinesCount = 1 And Len(Trim$(RTBedit.Text)) = 0 Then
    GetText = vbNullString
    Exit Function
End If

sTemp = vbNullString

For i = 0 To LinesCount
    nChar = SendMessage(RTBedit.hwnd, EM_LINEINDEX, i, ByVal 0&)
If nChar <> -1 Then
    nLen = SendMessage(RTBedit.hwnd, EM_LINELENGTH, nChar, ByVal 0&)
    If nLen < 2 Then nLen = 2
    s = String$(2, 0)
    CopyMemory ByVal s, nLen, 2
    s = s & String$(nLen - 2, 0)
    nLen = SendMessage(RTBedit.hwnd, EM_GETLINE, i, ByVal s)
   
    s = left$(s, nLen)
    Debug.Print s
    sTemp = sTemp & s & vbCrLf
Else
    sTemp = sTemp & vbCrLf
End If
Next i
GetText = sTemp
End Function


Alex Mals писал(а):2. послать EM_SETTEXTMODE с параметром ... or TM_SINGLECODEPAGE,
помогает в некоторых случаях получить русский текст вместо всякого г...

Это как? Пример можно?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 12.03.2005 (Сб) 21:58

Странно. Не первый день уже уведомлений об ответе по электронке не получаю. Приходится заходить на форум по нескольку раз на дню, чтобы отследить ответы. :(
Может где подкрутить нужно?
Так что прошу прощения, если отвечаю с большим опозданием.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 13.03.2005 (Вс) 1:16

А если вручную найти строку RTB, выделить её, и послать WM_COPY. Она будет в буфере и можо её вставить куда угодно.
Программисты не глючат - глючат компиляторы...

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 13.03.2005 (Вс) 10:03

CodeName33 писал(а):А если вручную найти строку RTB, выделить её, и послать WM_COPY. Она будет в буфере и можо её вставить куда угодно.

А если у пользователя в это время в буфере что-нибудь лежит? Не пойдёт. Хотелось бы по-человечески это сделать.
Вот ведь. Строку получить могу. Форматирование получить могу. А вот русский текст в приемлемом виде получить не могу. :(
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 13.03.2005 (Вс) 15:50

Ну так чего? Никто не подскажет?
Сколько обитаю на форуме - мало кто имеет дело с RTB или старается как можно меньше его использовать. :(
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Получить построчно текст из RTB

Сообщение Rody66 » 03.10.2011 (Пн) 16:21

Полностью аналогичная проблема, может быть через 6 лет появилось решение?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 28

    TopList  
cron