andy_KAO,Help!!!

ljleager 2004-11-25 12:44:47
在你的热心支持下,我在VD3中成功引入Formula One(TTF16.ocx),并实现了类Excel的报表系统。在此深表感谢!

当时我有一个问题,就是关于Formula One中,对带参数的属性赋值:
如 F1Book1.SheetName(1)="我的工作簿"

你给我的方法是用
F1Book.WritePropEx('SheetName',nSheetCount,sNewShtName)

很成功!

我想要知道WritePropEx()是如何工作的(最好粘贴源码),我试图在Dephi/BCB中实现这个功能,以后遇到类似问题好自己解决,但始终未成功,都快疯了!

请andy_KAO百忙中抽点时间,不吝赐教!

...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
marvie007 2004-11-25
  • 打赏
  • 举报
回复
请问贵公司的老板为什么总不回信!我们的KEY什么时候归还!
我们想飞飞不高,天天学鸟叫!
ljleager 2004-11-25
  • 打赏
  • 举报
回复
非常感谢!
infosea 2004-11-25
  • 打赏
  • 举报
回复
声明:抽取的代码,未经测试,请自行研究.

WritePropEx('SheetName',nSheetCount,sNewShtName)
对应
SetPropertyByNameEx(Param[0], Params[1], Param[2])

uses System,ActiveX

FControlDispatch: IDispatch

procedure SetPropertyByNameEx(const aName: string;
vIndex: Variant; const Value: TVarData);
begin
SetPropertyEx(GetMemberID(aName), vIndex, value);
end;

function GetMemberID(const aName : string) : integer;
var
id : integer;
wideName : WideString;
begin
WideName := aName;
OleCheck(FControlDispatch.GetIDsOfNames(GUID_NULL,@WideName,1,0,@id));
result := id;
end;


procedure SetPropertyEx(Index: Integer; vIndex: Variant;
const Value: TVarData);
const
DispIDArgs: Longint = DISPID_PROPERTYPUT;
var
Status, InvKind: Integer;
DispParams: TDispParams;
ExcepInfo: TExcepInfo;
Args: array[0..MaxDispArgs - 1] of TVarArg;
begin
//CreateControl;

Args[0] := TVarArg(Value);
Args[1] := TVarArg(vIndex);
DispParams.rgvarg := @Args;
DispParams.rgdispidNamedArgs := @DispIDArgs;
DispParams.cArgs := 2;
DispParams.cNamedArgs := 1;
if Value.VType <> varDispatch then
InvKind := DISPATCH_PROPERTYPUT else
InvKind := DISPATCH_PROPERTYPUTREF;
Status := FControlDispatch.Invoke(Index, GUID_NULL, 0,
InvKind, DispParams, nil, @ExcepInfo, nil);
if Status <> 0 then DispatchInvokeError(Status, ExcepInfo);
end;



andy_KAO 2004-11-25
  • 打赏
  • 举报
回复
我請R&D貼上來.

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧