Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавить текст в чужой RichEdit 2.0 [D7, WinXP]


3k ©   (2005-04-17 13:58:00) 

Здравствуйте, уважаемые мастера.
Есть такая проблема, речь пойдет о RichEdit 2.0 . Нашел я окно, его Handle, имя класса (RichEdit20W). Как записать в RichEdit чужого приложения текст. Не прокатывает почему-то WM_SETTEXT.


3k   (2005-04-22 18:29:00) [1]

ANB & Roadstar, огромное спасибо за помощь. Ошибку нашел, и как всегда она была просто идиотской.

С уважением, 3k.


ANB   (2005-04-22 09:16:00) [2]

Я в WordPad посылал. Версия 5.1 от XP.


3k   (2005-04-22 02:38:00) [3]

В отъезде был, так что хочу вернуться к теме.

To: ANB ©   (19.04.05 09:26) [6]
1. А hREdit RichEdit'a, это был handle в другом приложении, т.е Вы посылали текст не в RichEdit собственного приложения?
2. Это был именно RichEdit 2.0?


3k   (2005-04-22 02:38:00) [4]

В отъезде был, так что хочу вернуться к теме.

To: ANB ©   (19.04.05 09:26) [6]
1. А hREdit RichEdit'a, это был handle в другом приложении, т.е Вы посылали текст не в RichEdit собственного приложения?
2. Это был именно RichEdit 2.0?


ANB   (2005-04-19 09:26:00) [5]

Я у себя проверил. Текст присваивается. Тебе нужно именно добавить или заменить ?
Если заменить - это всего 2 команды :

SendMessage(hControl, EM_SETSEL, 0, -1); // Выделить все
SendMessage(hControl, EM_REPLACESEL, 0, LongWord(PChar(sText))); // Заменить выделение

Если добавить - нужно загнать выделение в конец.


3k   (2005-04-18 14:31:00) [6]

> ANB "или попробовать юзать EM_SETSEL + EM_REPLACESEL"

Пробывал, не работает. Может я ошибся где (см. ниже)? И насчет эмуляции нажатий клавиш, тоже думал, слишком медленно работает.

procedure Insert(hREdit:THandle; Index:Integer; const S:string);
var
L: Integer;
Selection: TCharRange;
Fmt: PChar;
Str: string;
begin
if Index >= 0 then
begin
Selection.cpMin := SendMessage(hREdit, EM_LINEINDEX, Index, 0);
if Selection.cpMin >= 0 then Fmt := '%s'#13#10
else begin
Selection.cpMin :=SendMessage(hREdit, EM_LINEINDEX, Index - 1, 0);
if Selection.cpMin < 0 then Exit;
L := SendMessage(hREdit, EM_LINELENGTH, Selection.cpMin, 0);
if L = 0 then Exit;
Inc(Selection.cpMin, L);
Fmt := #13#10'%s';
end;
Selection.cpMax := Selection.cpMin;
SendMessage(hREdit, EM_EXSETSEL, 0, Longint(@Selection));
Str := Format(Fmt, [S]);
SendMessage(hREdit, EM_REPLACESEL, 0, LongInt(PChar(Str)));
end;
end;


ANB   (2005-04-18 11:22:00) [7]


> Roadstar   (18.04.05 10:13) [1]
- не прав.


> 3k   (17.04.05 13:58)  
про WM_SETTEXT я уже сюда писал, к тексту эдитов это сообщение никакого отношения не имеет. 2 пути - эмулировать нажатие клавиш (не очень просто и проблемы с русскими буквами) или попробовать юзать EM_SETSEL + EM_REPLACESEL. Для эдитов и мемок проверял - работает. Для RichEdit попробуй сам.
ЗЫ.Иногда WM_GETTEXT/WM_SETTEXT для некоторых эдитов работает правильно, но я редко на такие нарывался.


ANB   (2005-04-18 11:21:00) [8]


> Roadstar   (18.04.05 10:13) [1]
- не прав.


> 3k   (17.04.05 13:58)  
про WM_SETTEXT я уже сюда писал, к тексту эдитов это сообщение никакого отношения не имеет. 2 пути - эмулировать нажатие клавиш (не очень просто и проблемы с русскими буквами) или попробовать юзать EM_SETSEL + EM_REPLACESEL. Для эдитов и мемок проверял - работает. Для RichEdit попробуй сам.
ЗЫ.Иногда WM_GETTEXT/WM_SETTEXT для некоторых эдитов работает правильно, но я редко на такие нарывался.


ANB   (2005-04-18 11:21:00) [9]


> Roadstar   (18.04.05 10:13) [1]
- не прав.


> 3k   (17.04.05 13:58)  
про WM_SETTEXT я уже сюда писал, к тексту эдитов это сообщение никакого отношения не имеет. 2 пути - эмулировать нажатие клавиш (не очень просто и проблемы с русскими буквами) или попробовать юзать EM_SETSEL + EM_REPLACESEL. Для эдитов и мемок проверял - работает. Для RichEdit попробуй сам.
ЗЫ.Иногда WM_GETTEXT/WM_SETTEXT для некоторых эдитов работает правильно, но я редко на такие нарывался.


Roadstar   (2005-04-18 10:13:00) [10]

И не прокатит, потому, что это чужой процесс.
Ищи тут: CreateRemoteThread, Write/Read ProcessMemory и т.д.


Наверх

Титульная страница Поиск, карта сайта Написать письмо