📄 activeformimpl1.cpp
字号:
{
const DISPID dispid = -501;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->Color = (TColor)(Value);
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_Cursor(short Value)
{
try
{
const DISPID dispid = 15;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->Cursor = (TCursor)(Value);
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_DoubleBuffered(TOLEBOOL Value)
{
try
{
const DISPID dispid = 13;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->DoubleBuffered = Value;
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_DropTarget(TOLEBOOL Value)
{
try
{
const DISPID dispid = 11;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->DropTarget = Value;
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_Enabled(TOLEBOOL Value)
{
try
{
const DISPID dispid = -514;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->Enabled = Value;
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_Font(IFontDispPtr Value)
{
try
{
const DISPID dispid = -512;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
SetVclCtlProp(m_VclCtl->Font, Value);
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_HelpFile(BSTR Value)
{
try
{
const DISPID dispid = 12;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->HelpFile = AnsiString(Value);
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_KeyPreview(TOLEBOOL Value)
{
try
{
const DISPID dispid = 6;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->KeyPreview = Value;
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_PixelsPerInch(long Value)
{
try
{
const DISPID dispid = 7;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->PixelsPerInch = (int)(Value);
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_PrintScale(TxPrintScale Value)
{
try
{
const DISPID dispid = 8;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->PrintScale = (TPrintScale)(Value);
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_Scaled(TOLEBOOL Value)
{
try
{
const DISPID dispid = 9;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->Scaled = Value;
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
STDMETHODIMP TActiveFormXImpl::set_Visible(TOLEBOOL Value)
{
try
{
const DISPID dispid = 1;
if (FireOnRequestEdit(dispid) == S_FALSE)
return S_FALSE;
m_VclCtl->Visible = Value;
FireOnChanged(dispid);
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_IActiveFormX);
}
return S_OK;
};
void __fastcall TActiveFormXImpl::ActivateEvent(TObject *Sender)
{
Fire_OnActivate();
}
void __fastcall TActiveFormXImpl::ClickEvent(TObject *Sender)
{
Fire_OnClick();
}
void __fastcall TActiveFormXImpl::CreateEvent(TObject *Sender)
{
Fire_OnCreate();
}
void __fastcall TActiveFormXImpl::DblClickEvent(TObject *Sender)
{
Fire_OnDblClick();
}
void __fastcall TActiveFormXImpl::DeactivateEvent(TObject *Sender)
{
Fire_OnDeactivate();
}
void __fastcall TActiveFormXImpl::DestroyEvent(TObject *Sender)
{
Fire_OnDestroy();
}
void __fastcall TActiveFormXImpl::KeyPressEvent(TObject *Sender, char &Key)
{
short TempKey;
TempKey = (short)Key;
Fire_OnKeyPress(&TempKey);
Key = (short)TempKey;
}
void __fastcall TActiveFormXImpl::PaintEvent(TObject *Sender)
{
Fire_OnPaint();
}
void __fastcall TActiveFormX::Button4Click(TObject *Sender)
{
::ActiveFormX->Caption = "Test " ;
Status->Panels->Items[0]->Text="test";
CComVariant* pvars=new CComVariant[1];
pvars[0].vt=VT_BYREF|VT_I4;
long temp = (long)this->Handle;
pvars[0].lVal=(long)this->Handle;
//pvars[0].lVal=(long)::ActiveFormX->Handle;
// CComVariant* dispparams;
//pvars = (CComVariant*)::ActiveFormX->Handle;
//pvars[0].vt=VT_BSTR;
// pvars.bstrVal=SysAllocString(Msg);
/*
memset(&dispparams, 0, sizeof dispparams);
dispparams.cNamedArgs=0;
dispparams.cArgs=2;
dispparams.rgvarg=new VARIANT[2];
dispparams.rgvarg[0].vt=VT_BYREF|VT_I4;
dispparams.rgvarg[0].plVal=(long*)&m_hPluginWnd;
dispparams.rgvarg[1].lVal=(long)::ActiveFormX->Handle;
CComVariant pvars("test"); */
// pvars = "test and test";
//pvars = "test and test";
//CComVariant pvars(long*));
//pvars[0].vt=VT_BSTR;
// pvars.bstrVal=SysAllocString(Msg);
DISPPARAMS dpNoArgs = {pvars, NULL, 0, 0};
//DISPPARAMS dpNoArgs = {::ActiveFormX->Handle};
VARIANT vResult;
OLECHAR FAR* szFunction = OLESTR("Create");
BSTR bstrTemp;
IDispatch* classes;
DISPID dispid_method;
try{
int i = 0;
::CoInitialize(NULL);
CLSID clsid;
::CLSIDFromProgID(L"dll.ComDll", &clsid);
IUnknown* pUnk;
HRESULT hr=::CoCreateInstance(clsid,NULL,CLSCTX_SERVER,IID_IUnknown,(void**)&pUnk);
if(FAILED(hr)){
i = 2;
}else{
hr = pUnk->QueryInterface(IID_IDispatch, (void**)&classes);
}
if(FAILED(hr)){
i = 1;
pUnk->Release();
::CoUninitialize();
return;
}else{
hr=classes->GetIDsOfNames(IID_NULL,&szFunction,1,LOCALE_USER_DEFAULT,&dispid_method);
hr=classes->Invoke(dispid_method,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_METHOD,&dpNoArgs,&vResult,NULL,NULL);
}
classes->Release();
pUnk->Release();
::CoUninitialize();
}catch(Exception &e)
{
}
return;
}
//---------------------------------------------------------------------------
void __fastcall TActiveFormX::ActiveFormActivate(TObject *Sender)
{
this->Align = alClient;
}
//---------------------------------------------------------------------------
void __fastcall TActiveFormX::Button7Click(TObject *Sender)
{
// 初始化COM库
CoInitialize(NULL);
// 根据ProgID创建组件
CLSID clsid; // 通过 ProgID 得到 CLSID
VARIANT vtOut;
HRESULT hr=CLSIDFromProgID(L"dll.ComDll",&clsid);
DISPID dispid_method;
IDispatch * pDisp = NULL; // 由 CLSID 启动组件,并得到 IDispatch 指针
hr = ::CoCreateInstance( clsid, NULL, CLSCTX_ALL, IID_IDispatch, (LPVOID *)&pDisp );
OLECHAR FAR* szFunction = OLESTR("Create");
if(SUCCEEDED(hr))
{
// 获取Add函数的DISPID
hr = pDisp->GetIDsOfNames(IID_NULL, &szFunction, 1, LOCALE_USER_DEFAULT, &dispid_method);
if(hr == S_OK)
{
CComVariant* pvarsIn = new CComVariant[2];
pvarsIn[0].vt = VT_I4;
pvarsIn[0].intVal = 2;
pvarsIn[1].vt = VT_I4;
pvarsIn[1].intVal = 4;
DISPPARAMS dispParam = {pvarsIn, NULL, 2, 0 };
// 调用Add函数
VariantInit(&vtOut);
//hr = pDisp->Invoke(pDisp, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispParam, &vtOut, NULL, NULL);
if(SUCCEEDED(hr))
{
printf("%d", vtOut.intVal);
}
VariantClear(&vtOut);
//delete[] pvarsIn;
pvarsIn = NULL;
}
// 其实如果我们知道接口方法或者属性的DISPID,可以直接通过DISPID来调用
VariantInit(&vtOut);
DISPPARAMS dispParam = {NULL, NULL, 0, 0 };
hr = pDisp->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &dispParam, &vtOut, NULL, NULL);
if(SUCCEEDED(hr))
{
printf("%d", vtOut.intVal);
}
VariantClear(&vtOut);
}
// 在CoUninitialize之前释放COM组件,否则导致COM库卸载后释放组件会出问题
pDisp = NULL;
// 释放COM库
CoUninitialize();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -