Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема при использовании WM_GETTEXT c RichEdit, Unicode и как с ним бороться 
:(
    Опции темы
guranvir
Дата 7.6.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2010

Репутация: нет
Всего: нет



Требуется получить текст из контрола следующего класса(имеется в виду оконный класс в смысле WinAPI) TInfuRichViewEdit.UnicodeClass Однако в описании этого сообщении стоит что unicode не поддерживается. Однако все же пошарив по инету убедился что народ как то решает сию проблему, а вот как непонятно. Проблема в том, что у меня не выводится текст из контрола, а появляется одиночный символ, который никак не связан с текстом в контроле.Как справится с проблемой? вот код, который у меня есть:
Код:
Код

GetClassName(h,s,256);
   if s='TInfuRichViewEdit.UnicodeClass' then
    begin
   SendMessage(h, wm_gettext ,100, lparam( @s[ 1 ]));
   captionw:=WideCharToString(s);
  Form1.Memo2.Lines.Add(captionw);
    end;

S объявлена как s:array[0..256] of WideChar;
PM MAIL   Вверх
dvamaster
Дата 8.6.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Именно про этот компонет TInfuRichViewEdit не скажу, но можно попробовать

SendMessageW


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
guranvir
Дата 8.6.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2010

Репутация: нет
Всего: нет



Не помогает к сожалению(
PM MAIL   Вверх
dvamaster
Дата 8.6.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Посмотри исходный код класса TRichEditStrings он находиться в ComCtrls.

Добавлено через 1 минуту и 1 секунду
у меня матерится на WM_GETTEXT, этот контрол его не понимает  smile 


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
guranvir
Дата 8.6.2010, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2010

Репутация: нет
Всего: нет



Кстати по ходу исследований  интересней факт появился:
добавил строку r:=SendMessage(h,WM_GETTEXTLENGTH,0,0); И она выдает в переменную r значение 0. 
Однако в MSDN сказано 
Замечания

Для элементов редактирования, текст, который будет скопирован - содержание элементов редактирования. Для комбинированного блока, текст - содержание элементов редактирования (или статический текст) часть комбинированного блока. Для кнопки, текст - имя кнопки. Для других окон, текст - заголовок окна. Чтобы определять длину элемента в окне списка, прикладная программа может использовать сообщение LB_GETTEXTLEN. 
При известных условиях, функция DefWindowProc возвращает значение, которое является большим, чем фактическая длина текста. Это происходит с некоторыми смесями ANSI и Уникода, и из-за операционной системы, которая учитывает возможное существование символов DBCS внутри текста. Возвращаемое значение, однако, будет всегда, по крайней мере, такого размера, как факти-ческая длина текста; Вы можете, таким образом, всегда использовать его, чтобы определить распре-деление в буфере. Это поведение может случаться тогда, когда прикладная программа использует и функции ANSI и общие диалоги, которые используют Уникод. LB_GETTEXT, или CB_GETLBTEXT, или функцию GetWindowText. 
//////////////////////////////////////////////////////////////////////////////////// 
Содержимое точно есть, остается предположить то реакция на сообщение переопределлена  
PM MAIL   Вверх
dvamaster
Дата 8.6.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Цитата(guranvir @  8.6.2010,  16:23 Найти цитируемый пост)
Содержимое точно есть, остается предположить то реакция на сообщение переопределлена  


Причем в DLL

для вытягивания текста можно воспользоваться этим

Код

function TRichEditStrings.Get(Index: Integer): string;
var
  Text: array[0..4095] of Char;
  L: Integer;
begin
  Word((@Text)^) := SizeOf(Text);
  L := SendMessage(RichEdit.Handle, EM_GETLINE, Index, Longint(@Text));
  if (Text[L - 2] = #13) and (Text[L - 1] = #10) then Dec(L, 2);
  SetString(Result, Text, L);
end;


Добавлено через 1 минуту
Index - номер строки


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
guranvir
Дата 8.6.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2010

Репутация: нет
Всего: нет



И все бы хорошо но прога чужая и исходнички закрыты ))
PM MAIL   Вверх
dvamaster
Дата 9.6.2010, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Тогда просто по хенделу использовать
Код

SendMessage(RichEdit.Handle, EM_GETLINE, Index, Longint(@Text))



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
guranvir
Дата 11.6.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.6.2010

Репутация: нет
Всего: нет



Извините а можете пояснить зачем эта строчка
Код

 Word((@Text)^) := SizeOf(Text); 

PM MAIL   Вверх
dvamaster
Дата 21.6.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Цитата(guranvir @  11.6.2010,  16:46 Найти цитируемый пост)
Word((@Text)^) := SizeOf(Text); 


формат строки в делфи

Код

1 байт: длинна строки (хотя в квоте на 2 тянет)
n: символы



--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.