Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

WebBroser не дает таскать текст в режиме редактирования   Найти похожие ветки 

 
Tack   (2005-08-02 15:56) [0]

Перевожу браузер в режим редактирования вот так:

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, где это сделано?


 
Styx   (2005-08-02 19:08) [1]

Насколько я помню, это должно решаться добавлением activex в uses. А именно вызовом coinitialize в секции инициализации этого модуля.


 
Tack   (2005-08-02 19:33) [2]

Сделал CoInitialize(nil) в секции initialization, CoUninitialize в секции finalization - не помогает. :-(

Все равно вырезать/копировать не работает. Только "вставить" можно текст. И мышкой таскать блоки текста не получается.


 
Tack   (2005-08-04 16:59) [3]

Все, проблема решена — надо на форму кинуть TRichEdit (можно сделать невидимым RichEdit1.Visible := False) и вся положенная функциональность появляется!

Теперь прошу объяснить, что такого делает компонент RichEdit при инициализации, что влияет на функциональность MSHTML редактора?

Подскажите, пожалуйста, а то exe-файл раздувается из-за этого безхозного RichEdit.


 
Styx   (2005-08-04 21:28) [4]

А TEmbeddedWB не пробовали? Где-то на M$ была статья о том, что приложение должно само обрабатывать акселераторы при работе с WebBrowser... Но там это вроде реализовано: http://www.euromind.com/iedelphi


 
Tack   (2005-08-04 23:21) [5]

Styx, спасибо за полезный ресурс!

команды Вырезать/Копировать заработали, "перетащить текст" не работает и в TEmbeddedWB, но зато много головной боли пропало насчет установки параметров отображения страницы. Я еще погляжу документацию на него подробнее, о результатах сообщу.


 
Tack   (2005-08-05 01:08) [6]

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


Спасибо за помощь!



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
4-1120548568
WG
2005-07-05 11:29
2005.08.28
Как узнать региональные настройки ?


4-1120635877
Хинт
2005-07-06 11:44
2005.08.28
Эмуляция выбора пункта меню в чужом приложении


3-1121700666
ali_tash
2005-07-18 19:31
2005.08.28
Как задекларировать BASED ON переменную


1-1123180138
rlz
2005-08-04 22:28
2005.08.28
Нужна помощь


1-1122542200
HmG
2005-07-28 13:16
2005.08.28
Установка пакета