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

Вниз

WebBrowser, Ctrl-C - Ctrl-V и Enter   Найти похожие ветки 

 
DmitryNekl   (2006-11-24 11:29) [0]

Уважаемые мастера.

Делаю систему управления сайтом с возможностью визуального редактирования кода. Поместил на форму WebBrowser, в который гружу FCKeditor (инструмент для визуального редактирования html-кода, клиентская часть написана на javascript и html, подробности - http://www.fckeditor.net/), отредактированные данные сохраняю в базе.

В WebBrowser не работали кнопки Ctrl-C и т.д. Поиск по интернету привел к такому решению ( http://read.excode.ru/art1542p8.html (объяснения, почему все так - тут: http://support.microsoft.com/kb/q168777/)):

Вам нужно добавить следующие строки в начало unit:

initialization
 OleInitialize(nil);

finalization
 OleUninitialize;


Это не ошибка. Информацию по данному вопросу можно найти на сайте Microsoft KnowledgeBase статья Q168777. Приведённый ниже код, устраняет данную проблему:

...

var
 Form1: TForm1;
 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
 SaveMessageHandler: TMessageEvent;

...

implementation

...

procedure TForm1.FormActivate(Sender: TObject);
begin
 SaveMessageHandler := Application.OnMessage;
 Application.OnMessage := MyMessageHandler;
end;

procedure TForm1.FormDeactivate(Sender: TObject);
begin
 Application.OnMessage := SaveMessageHandler;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Application.OnMessage := SaveMessageHandler;
 FOleInPlaceActiveObject := nil;
end;

procedure TForm1.MyMessageHandler(var Msg: TMsg; var Handled: Boolean);
var
 iOIPAO: IOleInPlaceActiveObject;
 Dispatch: IDispatch;
begin
 { exit if we don′t get back a webbrowser object }
 if WebBrowser = nil then
 begin
   Handled := False;
   Exit;
 end;

 Handled:=(IsDialogMessage(WebBrowser.Handle, Msg) = True);

 if (Handled) and (not WebBrowser.Busy) then
 begin
   if FOleInPlaceActiveObject = nil then
   begin
     Dispatch := WebBrowser.Application;
     if Dispatch <> nil then
     begin
       Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
       if iOIPAO <> nil then
         FOleInPlaceActiveObject := iOIPAO;
     end;
   end;

   if FOleInPlaceActiveObject <> nil then
     if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
        ((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)) then
       //nothing - do not pass on Backspace, Left or Right arrows
     else
       FOleInPlaceActiveObject.TranslateAccelerator(Msg);
 end;
end;


Кнопки Ctrl-C заработали... однако в визуальном режиме работы перестала работать Enter (строка не переводится). Кто-нибудь сталкивался, у кого-нибудь есть мысли?

Заранее спасибо!


 
Dmitrij_K   (2006-11-24 11:33) [1]

Вместо WB лучше пользоваться TEmbeddedWB, у него возможностей больше
И глюков CTRL+C не наблюдается


 
Anatoly Podgoretsky ©   (2006-11-24 11:36) [2]

> DmitryNekl  (24.11.2006 11:29:00)  [0]

WebBrowser имеет свой встроеный мехнизм визуального редактирования, к сожалению не помную как его включать. Нужно делать маленький файлик, который добавляет (ключает) эту возможность. Врод можно и через реестр.


 
DmitryNekl   (2006-11-24 11:45) [3]

Спасибо... но про TEmbeddedWB я не знаю совсем ничего, а про WebBrowser есть какие-то описания... и уже худо-бедно разобрался с ним.

По поводу встроенного механизма... FCKeditor - сторонняя разработка с кучей возможностей, многие из которых очень долго реализовывать самостоятельно (например, вставка вордовского текста из буфера обмена с одновременной очисткой html от мусора, работа с картинками и файлами на web-сервере и т.д.), которая используется во многих CMS, и отказываться от этих возможностей не хочется.

Насколько я понимаю, понять, почему отрубилась Enter - проще :).
Может быть, мой вопрос лучше в системное программирование?


 
Anatoly Podgoretsky ©   (2006-11-24 12:20) [4]

> DmitryNekl  (24.11.2006 11:45:03)  [3]

Ключевое слово сторонняя разработка


 
DmitryNekl   (2006-11-24 12:24) [5]

GNU LESSER GENERAL PUBLIC LICENSE - можно смело использовать


 
flaxe ©   (2006-11-24 13:03) [6]

DmitryNekl, я тоже когда-то заморачивался с TWebBrowser, особенно с клавишей Enter, будут еще много проблем возникать при работе со страницами с вложенными фреймами и еще не один раз придется в нем что-то исправлять, гараздно проще и удобнее использовать http://www.bsalsa.com/downloads.html
+ даны замечательные примеры, которыми разобраны множество возникающих вопросов при работе с компонентом


 
DmitryNekl   (2006-11-24 14:12) [7]

Спасибо! :) Посмотрел, сделал - понравилось :)



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

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

Наверх




Память: 0.49 MB
Время: 0.051 c
11-1157643265
mdw
2006-09-07 19:34
2007.06.03
Новости сайта kolnmck.ru


2-1179123062
проходил мимо решил заглянуть
2007-05-14 10:11
2007.06.03
как выключить чужую прогу


15-1178307312
raqy.style
2007-05-04 23:35
2007.06.03
Списки... списки... списк...


2-1179164356
ЯХ
2007-05-14 21:39
2007.06.03
16циричный код


15-1178777604
Alkid
2007-05-10 10:13
2007.06.03
Схемы разибения дисков