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

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

现在想让客户端程序得到

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

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

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

如有其他思路或方法也请指教。
...全文
62 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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属性

具体的可以看一下书

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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