Вставка данных

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вставка данных

Сообщение novo » 11.05.2013 15:26:57

Здравствуйте)

Задача такая, необходимо сделать "вставлялку" данных т.е. после установки курсора в Edit какой либо программы при нажатии определенного сочетания клавиш программа
выдает меню в котором можно выбрать данные из списка заранее составленного и вставляет выбранные данные в Edit.


Со вставкой данных все более мене понятно, можно использовать что то вроде:
Код: Выделить всё
var
s: PChar;
h: THandle;
begin
s := 'Krakozjabra';
h := FindWindow(nil,'Form1');
h := FindWindowEx( h, 0, 'TEdit',nil);
SendMessage(h, WM_SETTEXT, 0, Integer(s));


А вот как получить handle Edit-а в котором установлен курсор

Для окна над котором находится курсор нашел
Код: Выделить всё
WindowFromPoint(CrPos);


А вот для фокуса не могу найти.

Помогите кто чем может)

Добавлено спустя 1 час 30 минут 25 секунд:
Вроде как пошло дело)
Код: Выделить всё
function MyGetFocus: HWND;
var
  dwTargetOwner: DWORD; //указатель на подключаемый процесс
  dwThreadID: DWORD; //указатель на текущий процесс
begin
try
  dwTargetOwner := GetWindowThreadProcessId(GetForegroundWindow, nil);
  dwThreadID := GetCurrentThreadId(); //указатель на текущий процесс
  if (dwTargetOwner <> dwThreadID) then   AttachThreadInput(dwThreadID, dwTargetOwner, TRUE)
else  AttachThreadInput(dwThreadID, dwTargetOwner, FALSE);
result:=GetFocus;
except
   Result:=0;
   end;
  end; 


Добавлено спустя 7 часов 55 минут 14 секунд:
Я так понял, что большинство Edit-ов плевать хотели на WM_SETTEXT

Пробовал так:
Код: Выделить всё
SendMessage( MyGetFocus  , WM_SETTEXT, 0, Integer(s));   

Работает 50/50

Подскажите аналог
novo
новенький
 
Сообщения: 43
Зарегистрирован: 31.07.2011 21:35:10

Re: Вставка данных

Сообщение Лекс Айрин » 12.05.2013 01:06:30

если я правильно помню, то PostMessage/ PostThreadMessage
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вставка данных

Сообщение novo » 12.05.2013 01:46:07

С PostMessage и PostThreadMessage вообще никакой реакции)
novo
новенький
 
Сообщения: 43
Зарегистрирован: 31.07.2011 21:35:10

Re: Вставка данных

Сообщение Лекс Айрин » 12.05.2013 08:49:24

Значит, помню неправильно.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Вставка данных

Сообщение novo » 12.05.2013 15:58:12

Плюнул на WM_SETTEXT
Пока использую такую конструкцию

Код: Выделить всё
s:='Hello world';
for i:=1 to length(s) do sendmessage(ObjectHandle,WM_CHAR,ord(s[i]),0)


Я так понимаю о русских символах мечтать не приходится?

Добавлено спустя 18 минут 16 секунд:
На счет русского погорячился

Код: Выделить всё
function SetWinText(aText:string):boolean;
var
i:integer;
begin
Result:=true;
try
if ObjectHandle<>0 then
for i:=1 to length(aText) do sendmessage(ObjectHandle,WM_CHAR,ord(aText[i]),0);
except
   Result:=false;
end;
end;


Код: Выделить всё
var
s:string;
begin
s:='Просто текст';
SetWinText(Utf8ToAnsi(s));
novo
новенький
 
Сообщения: 43
Зарегистрирован: 31.07.2011 21:35:10


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 243

Рейтинг@Mail.ru