自定义的TMsgBox继承TShape类
TMsgBox = class(TShape)
private
public
constructor Create(AOwner: TComponent);override;
这个类的功能是,当鼠标在一个ScrollBox上移动时,触发ScrollBox1MouseMove事件,该类将显示出一个消息框,我初始化是在ScrollBox1MouseMove中调用
GDMsgbox :TMsgBox;
GDMsgbox:=TMsgBox.Create(ScrollBox1);运行时显示错误:Control '' has no parent window
请问初始化时是不是不应该传入ScrollBox1作为父窗口?还是其他原因?
TMsgBox = class(TShape)
private
public
constructor Create(AOwner: TComponent);override;
这个类的功能是,当鼠标在一个ScrollBox上移动时,触发ScrollBox1MouseMove事件,该类将显示出一个消息框,我初始化是在ScrollBox1MouseMove中调用
GDMsgbox :TMsgBox;
GDMsgbox:=TMsgBox.Create(ScrollBox1);运行时显示错误:Control '' has no parent window
请问初始化时是不是不应该传入ScrollBox1作为父窗口?还是其他原因?
解决方案 »
- FastReport中可以显示dwg图片吗?是如何显示的?
- DBCHART MouseMove 取X轴日期类型数值问题
- 如何给Raize中的RzDBNavigator各个按钮添加Caption
- constructor 和destructor关键字作用
- delphi有几种方法创建子线程
- 生成所有5位字母的排列要用一整天的时间吗?(P4 2.4G)
- XPSP2 是不是不能装DELPHI7 啊 为什么 没办法编怿 急啊 DELPHI 没办法用怎么生活
- 在cavas上用lineto画一线段,怎么实现:选中该线段,可以实现移动和删除
- VCL类型定义问题
- 这个储存过程应该怎样写呢?很简单的,简直是送分!!
- 100分求好的算法,数据库方面的,高手请进,欢迎友情UP
- 100分求快速比较记录的算法
ScrollBox1不对的,使用ScrollBox1的父类
GDMsgbox.Parent := ScrollBox1; //add如果还有错,就把你的Create的代码贴出来看看
Type
TKind = (stlt,strt,stlb,strb);
TMsgBox = class(TShape)
private
FMsg:TStrings;
protected
Kind:TKind;
procedure Paint; override;
procedure SetMsg(value:TStrings);
public
X,Y:Integer;
property Canvas;
constructor Create(AOwner: TComponent);override;
procedure Redraw;
published
property Msg:TStrings read FMsg write SetMsg;
property Canvas:TCanvas read FCanvas write SetCanvas;
end;
procedure Register;constructor TMsgBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Kind:=stlt;
Height:=28;Width:=80;
Font.Color:=clBlack;
FMsg := TStringList.Create;
end;procedure TMsgBox.SetMsg(value:TStrings);
var
SH,SW:integer;
I:integer;
begin
Msg.Assign(Value);
SW:=0;SH:=0;
Canvas.Font.Name:='宋体';
Canvas.Font.Size:=9;
for I:=0 to Msg.Count - 1 do
begin
Msg.strings[I+1]:=Msg.Strings[I];
if Canvas.TextWidth(Msg.Strings[I]) > SW then //单步调试时,错误是在这里显示
SW:=Canvas.TextWidth(Msg.Strings[I]);
SH:=SH + Canvas.TextHeight(Msg.Strings[I]);
end;
...我又调试了一下,好像不是我TMsgBox的问题,似乎是Canvas的问题,错误还是Control '' has no parent window
Type
TKind = (stlt,strt,stlb,strb);
TMsgBox = class(TShape)
private
FMsg:TStrings;
protected
Kind:TKind;
procedure Paint; override;
procedure SetMsg(value:TStrings);
public
X,Y:Integer;
property Canvas;
constructor Create(AOwner: TComponent);override;
procedure Redraw;
published
property Msg:TStrings read FMsg write SetMsg;
//这行注释掉的property Canvas:TCanvas read FCanvas write SetCanvas;
end;
procedure Register;不知是不是我Canvas属性定义的方式不对?
var
SH,SW:integer;
I:integer;
begin
if not Assigned(Parent) then Exit; //做一个检查先//Canvas.TextWidth计算宽度需要容器
///....
end;另外注意,我前面贴的:
GDMsgbox.Parent := ScrollBox1; //add你创建了Msgbox后,要给他设置一个容器
你可以搜索一下以前的帖子Owner Parent 区别