當我導入OCX文件導入Delphi中,它出現在組件面板的的ActiveX選項卡上。我只是用鼠標拖動它,並把它放在一個窗體和一個對象上。
Graph1:TGraph;
會自動添加到我的代碼中。其屬性和事件在Object Inspector窗口中可見。現在我想從我的代碼中訪問控制軸。如您所見,該屬性表示座標軸。另外我猜想IGraphAxes的XAxis/YAxis/ZAxis成員是IGraphAxis類型的idispatch指針。我寫了下面的程序訪問一個IDispatch接口:
procedure TForm2.GetProperty(dispobj: IDispatch; PropertyName: WideString;
var retvalue: Variant; Sender: TObject);
var hr: HRESULT;
DispId: integer;
value: Variant;
params: TDispParams;
begin
hr:=dispobj.GetIDsOfNames(GUID_NULL,@PropertyName, 1, LOCALE_SYSTEM_DEFAULT, @DispId);
Label1.Caption:=inttostr(DispId);
hr:=dispobj.Invoke(DispId,GUID_NULL,LOCALE_SYSTEM_DEFAULT,DISPATCH_PROPERTYGET,
Params,@Value,nil,nil);
Retvalue:=Value;
Label2.Caption:=inttostr(value);
end;
procedure TForm2.SetProperty(dispobj: IDispatch; PropertyName: WideString; Value: OLEVariant; Sender: TObject);
var
hr: HRESULT;
DispId: integer;
params: TDispParams;
begin
hr:=dispobj.GetIDsOfNames(GUID_NULL,@PropertyName,1, LOCALE_SYSTEM_DEFAULT, @DispId);
Label1.Caption:=inttostr(DispId);
params.rgvarg:[email protected];
params.rgdispidNamedArgs:[email protected];
params.cArgs:=1;
params.cNamedArgs:=1;
hr:=dispobj.Invoke(DispId,GUID_NULL,LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT,Params,nil,nil,nil);
end;
他們很好地工作IGraphAxes的顏色和樣式屬性:
GetProperty(Graph1.GraphAxes, 'Color', retvalue, Sender);
或者
SetProperty(Graph1.GraphAxes, 'Color',value,Sender);
但如何可以完全訪問到IGraphAxes的XAxis/YAxis/ZAxis成員?