• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

一个COM组件的问题,可能有点难

neweb 2002-03-24 11:05:04
加精
关于接口的问题,想把界面做得友好一点,接口一(MyImage)有个属性 MyFont。

现在想让客户端程序得到

objMyImage.MyFont.Color 这样的界面,该怎么做?

是否要做个接口二(ImageFont), 属性:Name,Size,Color等, 然后把 objMyImage.MyFont 的数据类型指为 IImageFont* ?

我试着这样做了,但是客户没有出现想要的结果,不知道 Unit1.pas 应该怎样写代码?望高手指教!

如有其他思路或方法也请指教。
...全文
18 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
neweb 2002-03-30
非常感谢各位的支持,尤其是 manboo(横刀) 大侠。

转了个小弯总算实现了要的结果,美中不足的是,属性的属性还不能被 InterDev 这样的智能IDE自动列出,只能是:

set obj2 = obj1.property1
  obj2.property2 = x

看来还得多看些书。。。
回复
manboo 2002-03-29
unit Unit2;

interface

uses
ComObj, ActiveX,windows, Project1_TLB,Graphics, StdVcl;

type
TFontX=Class(TFont,IFont)
protected
function get_Name(out name: WideString): HResult; stdcall;
function put_Name(name: WideString): HResult; stdcall;
function get_Size(out size: Currency): HResult; stdcall;
function put_Size(size: Currency): HResult; stdcall;
function get_Bold(out bold: BOOL): HResult; stdcall;
function put_Bold(bold: BOOL): HResult; stdcall;
function get_Italic(out italic: BOOL): HResult; stdcall;
function put_Italic(italic: BOOL): HResult; stdcall;
function get_Underline(out underline: BOOL): HResult; stdcall;
function put_Underline(underline: BOOL): HResult; stdcall;
function get_Strikethrough(out strikethrough: BOOL): HResult; stdcall;
function put_Strikethrough(strikethrough: BOOL): HResult; stdcall;
function get_Weight(out weight: Smallint): HResult; stdcall;
function put_Weight(weight: Smallint): HResult; stdcall;
function get_Charset(out charset: Smallint): HResult; stdcall;
function put_Charset(charset: Smallint): HResult; stdcall;
function get_hFont(out font: HFont): HResult; stdcall;
function Clone(out font: IFont): HResult; stdcall;
function IsEqual(const fontOther: IFont): HResult; stdcall;
function SetRatio(cyLogical, cyHimetric: Longint): HResult; stdcall;
function QueryTextMetrics(out tm: TTextMetricOle): HResult; stdcall;
function AddRefHfont(font: HFont): HResult; stdcall;
function ReleaseHfont(font: HFont): HResult; stdcall;
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;
TTestFont = class(TAutoObject, ITestFont)
protected
procedure Font(const Value: IFont); safecall;
{ Protected declarations }
end;

implementation

uses ComServ,Unit1;

procedure TTestFont.Font(const Value: IFont);
var
XFont:TFontX;
p:pointer;
begin
XFont:=p;
p:=XFont;
Form1.Font:=p;



end;
function TFontX.get_Name(out name: WideString): HResult; stdcall;
begin
name:=Self.Name;
end;
function TFontX.put_Name(name: WideString): HResult; stdcall;
begin
self.Name:=Name;

end;
Function TFontX.get_Size(out size: Currency): HResult; stdcall;
begin
self.Size:=size;
end;
function TFontX.put_Size( size: Currency): HResult; stdcall;
begin
self.Size:=size;
end;

initialization
TAutoObjectFactory.Create(ComServer, TTestFont, Class_TestFont,
ciMultiInstance, tmApartment);
end.
你吧TFontX的方法全实现了就可以这样用了,没时间来搞现在转告软件工程了!
回复
BigBen 2002-03-28
我很奇怪这个问题,很难吗?
在你的myimage中定义的myfont属性,设其类型为ifont不就可以了???
回复
neweb 2002-03-28
楼上,前面都说试过了,你试了没有?
回复
manboo 2002-03-27
我来写!
回复
intothe_rain 2002-03-27
只能up了
回复
neweb 2002-03-27
这本书我翻了一下,好象讲得很浅,没什么价值。
回复
taxi 2002-03-27
Delphi Com深入编程有讲。
回复
sxlshmily 2002-03-26
var
fnt:tfont;
begin
fnt:=iinterface1.Font;
form1.Font:=fnt;
end;
回复
neweb 2002-03-26
没写过的觉得难啊,不知怎么下手。

200 分都不值得各位写点东西出来吗?
回复
manboo 2002-03-26
哎!你自己写IFont 的的数据呵呵一点都不难!
回复
manboo 2002-03-26
使用IFont吧好用的!很方便的
回复
neweb 2002-03-24
to qqcxg(爱谁谁):
我试过 IFont*,但不知道还要什么代码,买不起书看...
回复
tanqth 2002-03-24
UP
回复
qqcxg 2002-03-24
Delphi本身提供对Color,font,的调度,所以你可以直接设置IFONT接口的FONT属性

具体的可以看一下书
回复
相关推荐
发帖
Delphi
创建于2007-08-02

4875

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2002-03-24 11:05
社区公告
暂无公告