Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2012, 12:47   #1
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию Скопировать выделенный текст из TWebBrowser

т.е. выделяем в браузере любой текст, в любом месте.
потом жмем Ctrl+C и выделенный текст копируется в буфер.

т.е. когда надо отправляем браузеру сообщение:
была нажата кнопка Ctrl
была нажата кнопка C

после чего текст, по-идее, скопируется в буфер...

попутно узнал про проблемы с буфером в браузере, разрулил.
теперь руками можно скопировать Ctrl+C.

а вот программно не получается.

нахожу Handle браузера с помощью этой функции:

Код:
function GetIEHandle(WebBrowser: TWebbrowser; ClassName: string): HWND;
var
  hwndChild, hwndTmp: HWND;
  oleCtrl: TOleControl;
  szClass: array [0..255] of char;
begin
 oleCtrl :=WebBrowser;
  hwndTmp := oleCtrl.Handle;
  while (true) do
  begin
   hwndChild := GetWindow(hwndTmp, GW_CHILD);
   GetClassName(hwndChild, szClass, SizeOf(szClass));
   if (string(szClass)=ClassName) then
   begin
   Result :=hwndChild;
   Exit;
   end;
   hwndTmp := hwndChild;
  end;
  Result := 0;
end;
потом посылаю сообщения:
Код:
SendMessage(H, WM_KeyDown, 17, 1900545); // Ctrl
SendMessage(H, WM_KeyDown, 67, 3014657); // C
нет эффекта, текст выделен, буффер пустой...
пробовал sleep(100) между сообщения - тоже ничего.

что я делаю не так?
xrob вне форума Ответить с цитированием
Старый 21.06.2012, 13:53   #2
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Цитата:
что я делаю не так?
Не так работают с содержимым IE. То, что тебе удалось сделать вручную через Ctrl+C еще не значит, что то же самое можно сделать программно. На фиг вообще заморачиваться с буфером, если можно легко забрать текст прямо себе в приложение?

Код:
   uses ..., OleAcc; // Не забудь

   // ...
   MyMessage : Integer;
   ObjResult : HRESULT;
   LRes : Cardinal;
   Doc : IHTMLDocument2;
   s : string;

   // ...
   h := GetIEHandle(WebBrowser2, 'Internet Explorer_Server'); // Твоя функция
   MyMessage := RegisterWindowMessage('WM_HTML_GETOBJECT');
   SendMessageTimeOut(h, MyMessage, 0, 0, SMTO_ABORTIFHUNG, 1000, LRes);
   ObjResult := ObjectFromLresult(lRes, IHTMLDocument2, 0, Doc);
   if Doc <> nil then
   begin
     s := (Doc.selection.createRange as IHTMLTxtRange).Text; // Выделенный текст у тебя в s
   end;
volvo877 вне форума Ответить с цитированием
Старый 21.06.2012, 15:12   #3
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

что такое IHTMLDocument2 ?
OleAcc подключил, но IHTMLDocument2 не находит...
xrob вне форума Ответить с цитированием
Старый 21.06.2012, 15:22   #4
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

IHTMLDocument2 описан в модуле mshtml, я думал, он у тебя уже подключен, раз ты с WB работаешь.
volvo877 вне форума Ответить с цитированием
Старый 21.06.2012, 16:26   #5
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

Бинго!
Вот теперь все заработало! ))
спасибо большое!
xrob вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделенный текст в WebBrouser! Leximus Общие вопросы Delphi 1 07.06.2012 11:13
Грабить выделенный текст. Alex Cones Общие вопросы Delphi 9 25.03.2010 14:04
Выделенный текст в RichEdit Andr Компоненты Delphi 1 20.08.2007 20:53
Выделенный текст в другом приложении Nez Win Api 9 09.04.2007 01:52