怎么将几个从TGraphicControl继承来的控件合并为一个控件?(50分)

  • 主题发起人 jackyxinli
  • 开始时间
J

jackyxinli

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己编了几个从TGraphicControl继承来的控件,我想将其合并为一个控件,我写了如下的代码,但是不成功:
type
TzzLEDClock = class(TGraphicControl)
private
FHourMinute: TzzLEDHourMinute;
FSecond: TzzLEDSecond;
FAmPm: TzzLEDAMPM;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;

implementation

constructor TzzLEDClock.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FHourMinute := TzzLEDHourMinute.Create(Self);
FSEcond := TzzLEDSecond.Create(Self);
FAmPm := TzzLEDAMPM.Create(Self);

FHourMinute.Visible := True;
FSecond.Visible := True;
FAmPm.Visible := True;
end;

destrucor TzzLEDClock.Destroy;
begin
FHourMinute.Free;
FSecond.Free;
FAmPm.Free;
inherited Destroy;
end;

procedure TzzLEDClock.Paint;
var
MBitmap: TBitmap;
begin
MBitmap := TBitmap.Create;
MBitmap.Width := Width;
MBitmap.Height := Height;
MBitmap.Canvas.FillRect(Rect(0, 0, Width, Height));
MBitmap.Canvas.CopyMode := cmSRCCOPY;
MBitmap.Canvas.CopyRect(Rect(0,0,61,22), FHourMinute.Canvas, Rect(0,0,61,22));
end;
请问如何解决这个问题?
 
李同志:见到你真高兴,这里再次感谢你的来信!还记得我吗?
我来发言:
1、任何没有窗口的可视组件必须以一个TwinControl类的派生类为父类(Parent)
 父类负责其子类的绘制
2、TwinControl类可包含其他组件(Contains 容器)
TGraphicControl不能。。。。。
所以建议你从 TCustomControl中派生TzzLEDClock
 
jackyxinli:你好,没人回答我再说两句:
我是: Yshboy1@163.com 前几天我们通过信,关于:WM_ERASEBKGND消息,
万分感谢,希望常联系,我浏览大富翁时忽然发现一个熟悉的名字,打开后又
发现一个熟悉的类定义,所以才有........
======在这里贴出来,希望大家给予帮助,谢谢!!!!=====

对你的回信中我不明白的问题罗列如下:
1、你信中说:“只要有Canvas属性的类都可以拦截WM_ERASEBKGND消息”,
我为此做了两个实验,第一个是:把拦截功能取消,再运行
你的演示程序,发现没有什么变化;第二个是:在你的类中我加入一个
Public变量CallFlag,在Create函数中使CallFlag:=0,在WMERASEBKGND
函数中加入代码:Inc(CallFlag),运行你的演示程序(加了一点程序),
并监视CallFlag,发现任何情况下:CallFlag=0,,,也就是说WMERASEBKGND
函数根本没有执行!
2、WMERASEBKGND(var Message: TMessage); message WM_ERASEBKGND;
WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
这两个消息处理函数,上边一个是你用的,下边一个是我用的,我是采用了
TWinControl类中的写法,不知你的根据为何?

在这里贴出来,希望大家给予帮助,谢谢!!!!
 
顶部