Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.05 c
2-1178674900
Ki
2007-05-09 05:41
2007.06.03
Проблема с DBLookUpComboBox ом


2-1179379997
Alkinoos
2007-05-17 09:33
2007.06.03
MDI окна


2-1178970944
Strate
2007-05-12 15:55
2007.06.03
Exeption внутри Thread


15-1177685755
easy
2007-04-27 18:55
2007.06.03
PHP DM Client - клиент для форумов сайта "Мастера Delphi"


2-1179133630
Zahadom
2007-05-14 13:07
2007.06.03
Копированиет с индикатором - ёлки-палки!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский