|
发表于 2008-1-25 13:59:48
|
显示全部楼层
找到原因了:
图王控件 IUnit 接口的
procedure SetPropertyValue(const Name: WideString; Value: OleVariant); safecall;
方法传递了一个OleVariant参数,而平台不支持直接传递Variant对象。
所以需要在vg_TLB.pas中封装一下
procedure SetPropertyValue(obj: IUnit; propName: String; prop: IDispatch);
这样,在x3中用这个方法替代所有的IUnit.SetPropertyValue方法调用(两处 ):
procedure TvgDemoform.vgctrl1SheetChange(Sender: TObject; const ASheet: ISheet);
begin
if vgctrl1.ActiveSheet<>nil then
begin
vgx3.vg_tlb.SetPropertyValue((vgctrl1.ActiveSheet as IUnit), 'cursheet', vgctrl3.ActiveSheet);
vgx3.vg_tlb.SetPropertyValue((vgctrl2.ActiveSheet as IUnit), 'cursheet', vgctrl3.ActiveSheet);
vgx3.vg_tlb.SetPropertyValue((vgctrl4.ActiveSheet as IUnit), 'cursheet', vgctrl3.ActiveSheet);
vgx3.vg_tlb.SetPropertyValue((vgctrl5.ActiveSheet as IUnit), 'cursheet', vgctrl3.ActiveSheet);
{vgctrl1.ActiveSheet.SetPropertyValue('cursheet', vgctrl3.ActiveSheet);
vgctrl2.ActiveSheet.SetPropertyValue('cursheet', vgctrl3.ActiveSheet);
vgctrl4.ActiveSheet.SetPropertyValue('cursheet', vgctrl3.ActiveSheet);
vgctrl5.ActiveSheet.SetPropertyValue('cursheet', vgctrl3.ActiveSheet);
}
end;
end;
procedure TvgDemoform.vgctrl3SelectChange(Sender: TObject);
var
s:string;
begin
vgx3.vg_tlb.SetPropertyValue((vgctrl4.ActiveSheet as IUnit), 'selected', vgctrl3.ActiveSheet.Selection);
//vgctrl4.ActiveSheet.SetPropertyValue('selected', vgctrl3.ActiveSheet.Selection);
vgctrl1.Execute('OnSelectChange()');
vgctrl1.Execute('btnUndo.Enable=CurSheet.Owner.CanUndo()');
vgctrl1.Execute('btnRedo.Enable=CurSheet.Owner.CanRedo()');
//s := 'SetMsg( 1,"["+str(' + SysUtils.FloatToStr(vgctrl3.ActiveSheet.Selection.Left ) + ',3)+","+ ';
//s := s+'Str(' + SysUtils.FloatToStr(vgctrl3.ActiveSheet.Selection.Top) + ',3) + "]-[" +';
//s := s+'str(' + SysUtils.FloatToStr(vgctrl3.ActiveSheet.Selection.Width) + ',3)+","+ ';
//s := s+'Str(' + SysUtils.FloatToStr(vgctrl3.ActiveSheet.Selection.Height) + ',3) + "]" )';
//vgctrl4.Execute(s);
end; |
|