控件设计问题(20分)

  • 主题发起人 主题发起人 zqwzz
  • 开始时间 开始时间
Z

zqwzz

Unregistered / Unconfirmed
GUEST, unregistred user!
以下为新建的LABEL组件,引入TGraphicControl的Canvas属性。
但在窗体中加入新建的LABEL组件后,设置Canvas中的Brush、FONT、
Pen时,新建的label组件却没变化。 为何?


unit label1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
Tlabel1 = class(Tlabel)
private

protected

public

published
property canvas;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('My', [Tlabel1]);
end;

end.
 
没重载create
 
构造的方法都没有,编译器或者设计器如何知道你的这个对象.
一个新对象的建立必须有自己的构造方法,和析够方法.
朋友多打开delphi的源代码看看吧!
 
Tlabel是从TGraphicControl中继承下来的,
对于TGraphicControl中的Canvas属性,在新的TLABEL1中还需重载吗?为什么有的属性
不需重载即可使用。
 
我一直再用delphi进行系统的开发,不过水平不太ok,对控件不太了解,也不能回答老兄的问题,
本人想知道写控件的有关的书籍,能够帮我的话,在下感激不尽。
E_mail:xiaodao47238518@sina.com
 
[:D][:D][:D]你真不幸,
贴段delphi源码给你看看,
with Canvas do
begin
if not Transparent then
begin
Brush.Color := Self.Color;
Brush.Style := bsSolid;
FillRect(ClientRect);
end;
Brush.Style := bsClear;

这可是TLabel的直接父类TCustomLabel的Paint过程中的一段,
类似的可有好多。总之,你设置的Canvas中的Brush、FONT、
Pen在控件被重画时已经被改回去了,你应该直接使用Tlabel
的属性,或重载Paint过程。

不过我觉得重载Paint过程的危险太大,还是不干的好。

我前几个月刚犯过类似的错误。
 
后退
顶部