什么是IPicture?(200分)

  • 主题发起人 主题发起人 yysun
  • 开始时间 开始时间
Y

yysun

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi做Automation Server时,想把图象传送到其他程序中,
却不知IPicture如何创建和使用,所以向各位高手请教。
 
IPicture 实际上是 OlePicture 的指针, 在 Delphi 的 AXCtrlx.pas 中优两个
过程专门进行 ActiveX 中的 OlePicture 和 TPicture 的转换工作:

procedure GetOlePicture(Picture: TPicture; var OlePicture: IPicture);
procedure SetOlePicture(Picture: TPicture; OlePicture: IPictureDisp);

GetOlePicture 将用一个 TPicture 来创建一个 OlePicture
SetOlePicture 将一个 OlePicture 直接转换成 TPicture 对象

欲要将做 Automation Server 中的图像传给其他程序, 可以建立一个 Picture
属性, 供其他程序使用:

interface

type
TMyControlX = class(TActiveXControl, IMyControlX)
private
FDelphiControl
...
public
function Get_Picture: IPictureDisp; safecall;
procedure Set_Picture(const Value: IPictureDisp); safecall;
...
property Picture: IPictureDisp read Get_Picture write Set_Picture;
end;

implementation

function TMyControlX.Get_Picture: IPictureDisp;
begin
GetOlePicture(FDelphiControl.Picture, Result);
end;

procedure TMyControlX.Set_Picture(const Value: IPictureDisp);
begin
SetOlePicture(FDelphiControl.Picture, Value);
end;

 
谢谢,huizhang,看来是要先操作Delphi本身的TPicture,
然后通过您提示的两个过程变成IPictureDisp.

我在Automation Server如下写:

function TMapViewer.Get_Picture: IPictureDisp;
var pp: TPicture;
begin
pp := TPicture.Create;
pp.LoadFromFile('c:/2.bmp');
GetOLEPicture(pp, result)
end;
(以上片断编译通过)

在Client程序中:
procedure TForm1.Button1Click(Sender: TObject);
var AA: OLEVariant;
begin
AA := CreateOLEObject('TestServ.TestObj');
SetOlePicture(Image1.Picture, AA.Pictrue);
end;

这段编译都不通过,错误信息是:
Incompatible types: 'variant' and 'picture'

再请教您解决方法。



 
看这一段程序好像没什么问题, 最好是将源程序(server and client)寄给我,
单看片断很难确定问题在哪里
我的 email: hzhang@sun20.hrbucea.edu.cn
 
非常感谢.程序已经寄出,另外<a href="/delphi/attachments/test.zip">在这里也可以下载</a>.
 
程序已经寄出,回避了VARIANT,利用CoClass创建了一个ITestServer对象(ITestServer必须事先注册,并在Project中引用),再用ITestServer的
Picture属性得到图像:

procedure TForm1.Button1Click(Sender: TObject);
var cc: ITestServer;
begin
cc := CoTestObj.create;
SetOlePicture(Image1.Picture, AA.Pictrue);
end;

按理说Variant可以传递图像, 只是最近太忙没时间研究它.
 
后退
顶部