Доброе всем время суток.
Камрады, возникла необходимость перехватывать события 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
GUID := StringToGUID('');
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 проходит без ошибок, но обработка правого клика не проходит :( Подскажите, в какую сторону копать?