我在写一个控件,如果把图片加载属性里,老是报内存错误,现象应该是TPICURE没有创建出来,但我在CREATE里面肯定是创建了的
为了简单直观,我写了个加TPICTURE的小例子,依然有这个错误,大家帮忙看下
下面是代码:unit NumEdit; //单元名称
Interface
uses          //该控件需要调用的单元
  SysUtils, Classes, Controls, StdCtrls,ExtCtrls,Graphics,messages;
type
  TNumEdit = class(TImage)  //控件类,继承自TEdit
  private                      //私有成员
    { Private declarations }
    FPic:TPicture;
    procedure setPic(Value: TPicture);    procedure PicChanged(sender:TObject);
    procedure Paint;override;
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
  protected                    //保护成员
    { Protected declarations }
  public                       //公有成员
    { Public declarations }
    constructor Create(AOwner:TComponent);
  published                    //发布成员
    { Published declarations }
    property Pic:TPicture read FPic write setPic;  end;
procedure Register;      //过程声明
implementation//下面函数功能是将控件TNumEdit的图标显示在Samples面板上。procedure Register;
begin
  RegisterComponents('Samples', [TNumEdit]);
end;
{ TNumEdit }constructor TNumEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FPic:=TPicture.Create;
  Fpic.OnChange:=PicChanged;
end;procedure TNumEdit.Paint;
begin
  inherited;
end;procedure TNumEdit.PicChanged(sender: TObject);
begin
  self.Invalidate;
end;procedure TNumEdit.setPic(Value: TPicture);
begin
  FPic.Assign(Value);
end;procedure TNumEdit.WMSize(var Message: TWMSize);
begin
  paint;
end;end.

解决方案 »

  1.   

    procedure TNumEdit.WMSize(var Message: TWMSize);
    begin
      Paint;//可能有错吧,改成Invalidate
    end;
    Picture没有错,正常的创建,赋值
      

  2.   

    constructor Create(AOwner:TComponent); 有问题,应该是
    constructor Create(AOwner:TComponent); override;吧
      

  3.   

    paint这里只是集成了TImage的实现,没有改动,应该没有影响吧
    主要问题是把空间拖到设计窗体上时,鼠标一点PIC属性就报DESIGNIDE.BPL内存错误。
      

  4.   

    刚试了一下,果然是override的问题,汗了
    写的那个控件里貌似试过加上override,然后也不行,就没想到改这里。谢谢
    yyfhz
    (火山)
    结贴了