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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Символ перед курсором 
:(
    Опции темы
Cheba
Дата 14.9.2004, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

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



Как можно узнать символ, который находится перед курсором? Это нужно сделать в чужом окне. Если быть точным, то нужно узнать какой символ находится перед курсором в активном поле ввода (edit, memo, richedit). Это поле ввода принадлежит другому процессу.
PM MAIL ICQ   Вверх
Alex
Дата 14.9.2004, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Код
function GetOldChar(H: THandle): String;
var
 LineNum,ColNum : Word;

 procedure CaretPos(H: THandle; var L,C : Word);
 // Определение координат
 begin
   L:= SendMessage(H,EM_LINEFROMCHAR,-1,0);
   C:= LoWord(SendMessage(H,EM_GETSEL,0,0)) - SendMessage(H,EM_LINEINDEX,-1,0);
 end;

 function GetWndText(WindowHandle: hwnd): string;
 // Функция считывания текста
 var
   txtLength : integer;
   buffer: string;
 begin
   TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
   txtlength := txtlength + 1;
   setlength (buffer, txtlength-1);
   sendmessage (WindowHandle,wm_gettext, txtlength, longint(@buffer[1]));
   result    := buffer;
 end;
begin
 Result:= '';
 CaretPos(h, LineNum, ColNum);
 if ColNum = 0 then Exit;
 with TStringList.Create do try
   Text:= GetWndText(h);
   Result:= Copy(Strings[LineNum], ColNum, 1);
 finally
   Free;
 end;
end;


Функцию проверил на Memo и TRichEdit


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Cheba
Дата 14.9.2004, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

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



Спасибо. Работает с эдитами (правда не со всеми), мемо и ричэдитами.
Не работает в OpenOffice.org
Добавлено @ 23:19
А еще работает с эдитами, у которых passwordchar задан. Правда только со своими эдитами, с чужими не получается.
Добавлено @ 23:23
Также не работает с полями ввода в броузерах.
PM MAIL ICQ   Вверх
Alex
Дата 15.9.2004, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Для ComboBox можно узнать так:
Код
function GetOldChar(H: THandle): String;
var
 ColNum: Integer;

 function GetPosition(WindowHandle: hwnd): Integer;
 begin
   SendMessage(WindowHandle, CB_GETEDITSEL, Longint(@Result), 0);
 end;

 function GetWndText(WindowHandle: hwnd): string;
 // Функция считывания текста
 var
   txtLength : integer;
   buffer: string;
 begin
   TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
   txtlength := txtlength + 1;
   setlength (buffer, txtlength-1);
   sendmessage (WindowHandle,wm_gettext, txtlength, longint(@buffer[1]));
   result    := buffer;
 end;
begin
 Result:= '';
 ColNum:= GetPosition(H);
 if ColNum = 0 then Exit;
 with TStringList.Create do try
   Text:= GetWndText(h);
   Result:= Copy(Strings[0], ColNum, 1);
 finally
   Free;
 end;
end;


Но код работает только когда фокус находится на ComboBox


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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