请问一个关于在自定义控件中包含ACTIVEX控件的问题(50分)

  • 主题发起人 主题发起人 huanzhugege
  • 开始时间 开始时间
H

huanzhugege

Unregistered / Unconfirmed
GUEST, unregistred user!
请问一个关于在自定义控件中包含ACTIVEX控件的问题。下面的TLincoBarCode是一个ACTIVEX控件,为什么当我把我定义的这个控件注册并拖放到窗体上时,会发生“Could not obtain OLE control window handle”错误?难道在自定义控件中不能包含ACTIVEX控件吗?
type
TQRBarCode = class(TQRPrintable)
private
{ Private declarations }
FBarCode: TLincoBarCode;
protected
{ Protected declarations }
………………
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
……………………………………
end;

procedure Register;

implementation

constructor TQRBarCode.Create(AOwner: TComponent);
Const
INITWIDTH = 60;
INITHEIGHT = 30;
begin
inherited Create(AOwner);
FBarCode := TLincoBarCode.Create(nil);
FBarCode.Width := INITWIDTH;
FBarCode.Height := INITHEIGHT;
self.Width := INITWIDTH;
self.Height := INITHEIGHT;
end;

destructor TQRBarCode.Destroy;
begin
FBarCode.Free;
inherited;
end;

………………………………

procedure TQRBarCode.Paint;
var
srcdc, destdc: HDC;
begin
srcdc := GetDc(FBarCode.Handle);
destdc := GetDC(self.Handle);
BitBlt(destdc, 0, 0, FBarCode.Width, FBarCode.Height,
srcdc, 0, 0, SRCCOPY);
ReleaseDC(FBarCode.Handle, srcdc);{ TODO : ole }
ReleaseDC(self.Handle, destdc);
end;
…………………………………………

procedure TQRBarCode.Refresh;
begin
FBarCode.Refresh;
Invalidate();
end;

其中的
 
有ACTIVEX控件?要这样:
constructor TQRBarCode.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
CoInitialize(nil);
//.....
end;

destructor TQRBarCode.Destroy;
begin
FBarCode.Free;
CoUninitialize();
inherited;
end;
 
不行呀,好像是窗口句柄之类的事情,如果不封装成组件
srcdc := GetDc(FBarCode.Handle);
这样调用就可以,可是如果是封装成组件就不可以。
请帮助解决,谢谢!
 

Similar threads

后退
顶部