Конференция "Corba" » Перехват событий Excel без .net [Delphi, Windows]
 
  • YCH.Del © (13.12.07 10:56) [0]
    Доброе всем время суток.

    Камрады, возникла необходимость перехватывать события Excel. На это тему я нашел только одну статью, размноженную по тырнету, и предполагющую использование .net, что нежелательно. Попытался перевести с .net на win32, получилось примерно следующее:


    interface
    { тут я поскипал чутка }
    type IExEvents = interface(IUnknown)
      procedure Workbook_SheetBeforeRightClick(Sh, Target: Variant; var Cancel: Boolean);
    end;

    type TExEvents = class(TInterfacedObject, IExEvents)
      procedure Workbook_SheetBeforeRightClick(Sh, Target: Variant; var Cancel: Boolean);
    end;

    var
     frmMain: TfrmMain;
     ExcelEventSynk: TExEvents;

    implementation

    procedure TExEvents.Workbook_SheetBeforeRightClick(Sh, Target: Variant;
     var Cancel: Boolean);
    begin
      ShowMessage('Right click');
      Cancel := False;
    end;



    Имена процедур и параметры я как честный списал с Excel-евского васика, в котором все это замечательно обрабатывается (в частности - нажатие правой кнопки мыши). Но нужно на Delphi :(

    Ладно, отвлекся. Вот так я пытаюсь заставить все это работать:

    procedure TfrmMain.acExEventsExecute(Sender: TObject);
    var ICPC: IConnectionPointContainer;
       GUID: TGUID;
    begin
      // WorkbookEvents GUID
      GUID := StringToGUID('{00024412-0000-0000-C000-000000000046}');
      ICPC := IInterface(Excel) as IConnectionPointContainer;
      case ICPC.FindConnectionPoint(GUID, CP) of
         S_OK: begin
            CP.Advise(ExcelEventSynk, ExCookie);
         end;
         E_POINTER: ShowMessage('Invalid CP');
         CONNECT_E_NOCONNECTION: ShowMessage('Trouble with GUID');
      end;
    end;



    В данном случае Excel - Variant, который я получаю OLEContainer1.OleObject. CP - IConnectionPoint. FindConnectionPoint проходит без ошибок, но обработка правого клика не проходит :( Подскажите, в какую сторону копать?
  • clickmaker © (13.12.07 13:32) [1]
    а TExcelApplication не пробовал использовать?
  • boa_kaa © (24.12.07 17:26) [2]
 
Конференция "Corba" » Перехват событий Excel без .net [Delphi, Windows]
Есть новые Нет новых   [120350   +20][b:0][p:0.001]