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

Вниз

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

 
Tack   (2005-08-04 19:27) [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 - ничего на этот счет не сказано.

ПРОБЛЕМА РЕШАЕТСЯ, если на форму кинуть TRichEdit (можно сделать невидимым RichEdit1.Visible := False) и вся положенная функциональность появляется!

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

Мне подсказали тут, что может надо COM правильно инициализировать — вызывал CoInitialize/CoUninitialize — без толку. Подскажите, пожалуйста, а то exe-файл раздувается из-за этого безхозного RichEdit.


 
k2 ©   (2005-08-05 04:46) [1]

не знаю што уж делает RichEdit, наверное што-то ужасное :)
но если вместо вызовов CoInitialize/CoUninitialize использовать
OleInitialize/OleUninitialize, то проблемка успешно исчезает


 
Tack   (2005-08-05 09:39) [2]

Спасибо!!!!!

теперь понятно.
Явный вызов OleInitialize(nil) в разделе инициализации есть только в модулях ShellCtrls, OleAuto, OleCtnrs, а модуль SHDocVw, где находится TWebBrowser, ни одного из них не вызывает, в отличие от ComCtrls с компонентом RichEdit.  

Подписал OleInitialize(nil) в инициализацию - все функции редактирования теперь работают в TWebBrowser.

Выдержка из 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.032 c
6-1144618623
Nikolas
2006-04-10 01:37
2006.08.27
Сетевой движок


2-1154633667
Mr tray
2006-08-03 23:34
2006.08.27
рисование на канвасе TImage


1-1152862358
serg_iv
2006-07-14 11:32
2006.08.27
директория программы по умолчанию


4-1146820955
Dimich1978
2006-05-05 13:22
2006.08.27
получить handle окна по неполному имени


15-1154418847
vidiv
2006-08-01 11:54
2006.08.27
Как восстановить администратора?