一个关于ActiveX的问题

18 views
Skip to first unread message

gxg...@gmail.com

unread,
Nov 25, 2015, 5:55:38 AM11/25/15
to Qt中文
一,二,三是背景介绍,四,五是需求。
一,用QAxBase::generateDocumentation()功能生成了ActiveX控件的reference,片段如下:
============================================================================
[b][u]Signals:[/u][/b]
void DisplayExecution(IDispatch* exec, ExecutionDisplayReasons reason);
void ExitApplication();
void DisplaySequenceFile(IDispatch* file, SequenceFileDisplayReasons reason);


void ExitApplication () [signal]
Connect a slot to this signal:
QObject::connect(object, SIGNAL(ExitApplication()), receiver, SLOT(someSlot()));

void DisplayExecution (IDispatch* exec, ExecutionDisplayReasons reason) [signal]
Connect a slot to this signal:
QObject::connect(object, SIGNAL(DisplayExecution(IDispatch*, ExecutionDisplayReasons)), receiver, SLOT(someSlot(IDispatch*, ExecutionDisplayReasons)));


void DisplaySequenceFile (IDispatch* file, SequenceFileDisplayReasons reason) [signal]
Connect a slot to this signal:
QObject::connect(object, SIGNAL(DisplaySequenceFile(IDispatch*, SequenceFileDisplayReasons)), receiver, SLOT(someSlot(IDispatch*, SequenceFileDisplayReasons)));

============================================================================
二,在这个ActiveX控件中原生的说明文档中,对应的片段如下:
[u][b]Events[/b][/u]
DisplaySequenceFile Event
Syntax
ControlName_DisplaySequenceFile ( file, reason)

DisplayExecution Event
Syntax
ControlName_DisplayExecution ( exec, reason)

============================================================================
三,在MFC中对应的代码如下:
BEGIN_EVENTSINK_MAP(CTestExecDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CTestExecDlg)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 1 /* ExitApplication */, OnExitApplication_ApplicationMgr, VTS_NONE)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 10 /* Wait */, OnWait_ApplicationMgr, VTS_BOOL)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 11 /* HandleError */, OnHandleError_ApplicationMgr, VTS_I4 VTS_BSTR)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 22 /* DisplayExecution */, OnDisplayExecutionApplicationMgr, VTS_DISPATCH VTS_I4)
ON_EVENT(CTestExecDlg, IDC_APPLICATIONMGR, 21 /* DisplaySequenceFile */, OnDisplaySequenceFileApplicationMgr, VTS_DISPATCH VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

============================================================================
四,目前的需求是,在pyqt中实现类似MFC这段代码的功能,按ActiveX控件供应商的话来说就是create ActiveX event handlers就可以了。不知道在pyqt中如何进行create ActiveX event handlers。根据第一段生成的reference,似乎是可以用pyqt的signal/slot的机制来create ActiveX event handlers(对应mfc的eventsink map那段的代码),但是不知道代码要如何写:
QObject::connect(object, SIGNAL(DisplayExecution(IDispatch*, ExecutionDisplayReasons)), receiver, SLOT(someSlot(IDispatch*, ExecutionDisplayReasons)))


五,等效的需求。在http://blog.csdn.net/yangxiao_0203/article/details/7422715这篇文章中,有人用excel的ActiveX控件也搞了一个reference,如果有基于excel的create ActiveX event handlers的代码可以参考一下也可以。另外我还没搞明白系统中哪个ActiveX控件是对应excel的,从而可以通过generateDocumentation()获取excel的reference。

多谢大家啦。
Reply all
Reply to author
Forward
0 new messages