Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ctrl+C всёравно не пашет, привожу исходник 
V
    Опции темы
xoslv
Дата 13.1.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Цель: Добится чтобы в броузере работала комбинация Ctrl+C & Ctrl+V
Вот мой код:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, ActiveX, StdCtrls, ComCtrls, Gauges;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
      procedure FormCreate(Sender: TObject);
      procedure FormActivate(Sender: TObject);
      procedure FormDeactivate(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
      procedure MyMessageHandler(var Msg: TMsg; var Handled: Boolean);
  private
    { Private declarations }
    FOleInPlaceActiveObject: IOleInPlaceActiveObject;
      procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);

  public
    { Public declarations }
  end;

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

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  Flags, TargetFrameName, PostData, Headers: OleVariant;
begin 
  Application.OnMessage := MsgHandler;
  WebBrowser1.Navigate('http://forum.vingrad.ru/', Flags,
  TargetFrameName, PostData, Headers);

end;

// nachalo Masiva dlja knopki "ENTER" (GOOD, work)...
procedure TForm1.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var 
  iOIPAO: IOleInPlaceActiveObject; 
  Dispatch: IDispatch;
begin 
  if not Assigned(WebBrowser1) then 
  begin
    Handled := False; 
    Exit; 
  end;

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

  if (Handled) and (not WebBrowser1.Busy) then 
  begin 
    if FOleInPlaceActiveObject = nil then
    begin 
      Dispatch := WebBrowser1.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;
// konec Masiva dlja knopki "ENTER" (GOOD, work)...

// nachalo dlja massiva Ctrl+C i t.d....
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 WebBrowser1 = nil then
   begin
   Handled := False;
   Exit;
   end; Handled:=(IsDialogMessage(WebBrowser1.Handle, Msg) = True); if (Handled) and (not WebBrowser1.Busy) then
   begin
   if FOleInPlaceActiveObject = nil then
   begin
   Dispatch := WebBrowser1.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;
// konec dlja massiva Ctrl+C i t.d....
end.

Подскажите пожалуйста где ошибка.... Я немогу понять...
Зарание спасибо!

Это сообщение отредактировал(а) xoslv - 13.1.2007, 15:26
--------------------
Не всё то маздай, что синее!
PM MAIL ICQ   Вверх
xoslv
Дата 13.1.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 12.1.2007

Репутация: нет
Всего: нет



Всё! Разобрался, работает....
--------------------
Не всё то маздай, что синее!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.