当我将 ocx 文件导入 Delphi 时,它出现在 Component Palette 的 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:=@Value;
params.rgdispidNamedArgs:=@DispIDArgs;
params.cArgs:=1;
params.cNamedArgs:=1;
hr:=dispobj.Invoke(DispId,GUID_NULL,LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT,Params,nil,nil,nil);
end;
它们适用于 IGraphAxes 的 Color 和 Style 属性:
GetProperty(Graph1.GraphAxes, 'Color', retvalue, Sender);
或者
SetProperty(Graph1.GraphAxes, 'Color',value,Sender);
但是如何获得对 IGraphAxes 的 XAxis/YAxis/ZAxis 成员的完全访问权限?