![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WebBroser не дает таскать текст в режиме редактирования [D7, WinXP]
Tack © (2005-08-02 15:56:00)Перевожу браузер в режим редактирования вот так:
var
Disp: IDispatch;
Editor: IHTMLDocument2;
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('about:<html><body></body></html>');
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
CurrentWB: IWebBrowser;
begin
Disp := pDisp;
CurrentWB := Disp as IWebBrowser;
editor := (CurrentWB.Document as IHTMLDocument2);
editor.DesignMode := 'On';
end;
Потом после запуска программы ввожу в браузер текст, добавляю картинки, выделяю, делаю текст жирным/наклонным/подчеркнутым (Ctrl+B, +I, +U) - никаких проблем.
Но ни вырезать из браузера текст, ни скопировать его, ни перетащить мышкой - не получается. Я смотрел в MSDN различные опции MSHTML - ничего на этот счет не сказано.
Предусмотрено ли это вообще или надо все указанные действия реализовывать самому через события DragDrop ? Может есть готовые компоненты VCL или ActiveX, где это сделано?
Tack (2005-08-05 01:08:00) [1]Styx, все, я понял!!! :-)
В разделе
initialization
любого модуля программы надо вызвать OleInitialize(nil), а не CoInitialize(nil) !!! Ну и соответственно OleUninitialize при финализации.
Все функции редактирования теперь работают в TWebBrowser. В TEmbeddedWB надо все это писать руками. А может что-то подобное надо сделать и в его модуле, но я у него смотрел исходник - вроде все нормально на этот счет...
Выдержка из MSDN:
Applications that use the following functionality must call OleInitialize() before calling any other function in the COM library:
-Clipboard
-Drag and drop (! вот оно !)
-Object linking and embedding (OLE)
-In-place activation
Спасибо за помощь!
Tack (2005-08-04 23:21:00) [2]Styx, спасибо за полезный ресурс!
команды Вырезать/Копировать заработали, "перетащить текст" не работает и в TEmbeddedWB, но зато много головной боли пропало насчет установки параметров отображения страницы. Я еще погляжу документацию на него подробнее, о результатах сообщу.
Styx (2005-08-04 21:28:00) [3]А TEmbeddedWB не пробовали? Где-то на M$ была статья о том, что приложение должно само обрабатывать акселераторы при работе с WebBrowser... Но там это вроде реализовано: http://www.euromind.com/iedelphi
Tack (2005-08-04 16:59:00) [4]Все, проблема решена — надо на форму кинуть TRichEdit (можно сделать невидимым RichEdit1.Visible := False) и вся положенная функциональность появляется!
Теперь прошу объяснить, что такого делает компонент RichEdit при инициализации, что влияет на функциональность MSHTML редактора?
Подскажите, пожалуйста, а то exe-файл раздувается из-за этого безхозного RichEdit.
Tack (2005-08-02 19:33:00) [5]Сделал CoInitialize(nil) в секции initialization, CoUninitialize в секции finalization - не помогает. :-(
Все равно вырезать/копировать не работает. Только "вставить" можно текст. И мышкой таскать блоки текста не получается.
Styx (2005-08-02 19:08:00) [6]Насколько я помню, это должно решаться добавлением activex в uses. А именно вызовом coinitialize в секции инициализации этого модуля.