Главная страница
    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.052 c
2-1178997321
Sonic90
2007-05-12 23:15
2007.06.03
ListBox


2-1179058680
Просто_новичок
2007-05-13 16:18
2007.06.03
Частое обращение к жёсткому диску.


3-1173856188
Lavrenty
2007-03-14 10:09
2007.06.03
XML-файл и DBGrid


6-1164279691
Warstone
2006-11-23 14:01
2007.06.03
Определения PID процесса, открывшего сокет


3-1173848735
Xmen
2007-03-14 08:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский