想做一个能够感知剪贴板动作的Memo控件,可是把该控件拖到Form上时,老是出错? (100分)

  • 主题发起人 主题发起人 baoling
  • 开始时间 开始时间
B

baoling

Unregistered / Unconfirmed
GUEST, unregistred user!
想做一个能够感知剪贴板动作的Memo控件,可是把该控件拖到Form上时,老是
提示"control '' has no parent window",这是为什么?
代码如下:
type
TJDQMemo = class(TMemo)
private
NextClipHwnd: HWND;
procedure WMDrawClipBoard(var AMessage: TMessage); message WM_DRAWCLIPBOARD;
protected
public
constructor Create(AOwner: TComponent); override; //构建
destructor Destroy; override;
published
end;

procedure Register;

implementation

constructor TJDQMemo.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
NextClipHwnd := SetClipBoardViewer(Handle);
end;

destructor TJDQMemo.Destroy;
begin
ChangeClipboardChain(Handle, NextClipHwnd);
SendMessage(NextClipHwnd, WM_CHANGECBCHAIN, Handle, NextClipHwnd);
inherited Destroy;
end;

procedure TJDQMemo.WMDrawClipBoard(var AMessage: TMessage);
var
s: string;
begin
......
......
end;

 
try inherit from TCustomMemo
 
在loaded中初始化
 
给它一个parent行吗?
 
在自己写的控件中出现"control '' has no parent window"错误,一般是控件在创建或
释放时进行控件绘制操作。
在对控件绘制的代码前加上一句:
if ([csLoading, csDestroying, csReading, csUpdating, csWriting] *
ComponentState <> []) or (UpdateCount <> 0) then
Exit;
其中UpdateCount为VCL中惯用的只读属性(自定义),在BeginUpdate和EndUpdate(自定义)中修改。
不用也可。
 
多人接受答案了。
 
后退
顶部