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

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

не копируються данные из TWebBrowser [D7, Win2k, WinXP]


Dysan ©   (2005-11-07 13:53:00) 

Значит столкнулся с такой проблемой.
Писал программу в Win2000
Требовалось из TWebBrowser скопировать весь текст и создав документ Word в него вставить! и Все работало посредством вот таких не хитрых команд:
WB.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DONTPROMPTUSER);
WB.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER);
WB.ExecWB(OLECMDID_CLEARSELECTION, OLECMDEXECOPT_DONTPROMPTUSER);
Переустановил систему на WinXP SP2 и все... работать перестало :(
а точнее не срабаотывает комманда WB.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER);
Хоть тресни но в буфере обмена остаеться предыдущий скопированный текст! :(
Помогите решить трабл!


Dysan   (2005-11-10 11:54:00) [1]

я решил проблему по другому
т.к. мне надо было срочно то я наверное сделал коряво но мне главное был результат.
я скачал с тори компонент реализующий тотже TWebBrowser только с дополнительными функциями. так вот у него была сделана команда копи вот так:
InvokeCmd(FALSE, OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, vaIn, vaOut);

где

procedure TEmbeddedWB.InvokeCMD(InvokeIE: Boolean; Value1, Value2: Integer; var vaIn, vaOut: OleVariant);
var
 CmdTarget: IOleCommandTarget;
 PtrGUID: PGUID;
begin
 New(PtrGUID);
 if InvokeIE then PtrGUID^ := CLSID_WebBrowser else
   PtrGuid := PGUID(nil);
 if Document <> nil then
 try
   Document.QueryInterface(IOleCommandTarget, CmdTarget);
   if CmdTarget <> nil then
   try
     CmdTarget.Exec(PtrGuid, Value1, Value2, vaIn, vaOut);
   finally
     CmdTarget._Release;
   end;
 except end;
 Dispose(PtrGUID);
end;

и работает!
хотя если приглядеться то принципиальной разници я так и не увидел
CmdTarget.Exec(PtrGuid, Value1, Value2, vaIn, vaOut); - помоему тоже самое что и ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER);


SuperVK   (2005-11-10 04:17:00) [2]

Вообще странное дело. Вот что я вычитал по этому поводу:

Q: Paste works fine, but Cut and Copy won't work. What's the problem?
A: You have to add the following line to the bottom of your unit:

initialization
OleInitialize(nil);

finalization
OleUninitialize;

А по поводу политик и вообще проверки, команды копирования попробуй следующий код:
if WebBrowser1.OleObject.Document.queryCommandEnabled('Copy') then
    ShowMessage('Команда copy разрешена')
else ShowMessage('Команда copy ЗАПРЕЩЕНА!');

Только не забудь перед её выполнением предварительно чего-нибудь ручками выделить в WebBrowser1.


umbra   (2005-11-09 15:26:00) [3]

это политика безопастности XP sp2. Чтобы это было возможно, надо где-то найти соответствующую галочку и изменить ее на противоположную. точнее - что и где я не знаю


Daysn   (2005-11-09 12:34:00) [4]

Попробовал, проверил! Не работает!
что за фигня... :(


SuperVK   (2005-11-09 04:12:00) [5]

Сделай новый проект. Добавь на него TWebBrowser и кнопку с кодом:

OleInitialize(nil);
WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DONTPROMPTUSER);
WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER);

Проверь, работает или нет.


Dysan   (2005-11-08 12:11:00) [6]

Вручную пробовал вставляет предыдущий скопированный текст.
да вот хоть тресни... и OleInitialize(nil); не помогает! :(
не работает именно комманда копирования!!! а все остальные нормально
что то видимо не хватает.


supervk   (2005-11-08 09:46:00) [7]

У меня и в XP и в 2000 работает почти тоже самое:

OleInitialize(nil);
Explorer.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DONTPROMPTUSER);
Explorer.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DONTPROMPTUSER);

Вручную вставлять пробовал?


Наверх

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