比如说,我给tpicture类建一个自定义的子类,现在需要给子类的LoadFromFile过程增加一事件,可是父类的tpicture.loadfromfile不支持重载,我该如何做才能在子类的loadfromfile过程中即实现了加载了图片又增加了我需要的功能呢?

解决方案 »

  1.   

    恐怕不行,重载必须是申明为VIRTUAL的虚函数。
      

  2.   

    type  TMyPicture = class(TPicture)
      public
        procedure LoadFromFile(const Filename: string); overload;
      end;implementation{ TMyPicture }procedure TMyPicture.LoadFromFile(const Filename: string);
    var
      a: string;
    begin
     inherited LoadFromFile(Filename);
     a := Filename + '^OK';
     // 添加自定义事件
    end;// 当创建TMyPicture对象以后,调用的方法就是TMyPicture.LoadFromFile对象方法。
    // 另:去掉TMyPicture定义部分LoadFromFile方法后面的overload 在D7 中也是编译通过的。
      

  3.   

    procedure LoadFromFile(const Filename: string); overload;这个overload可以在这里引用吗?我查了一下 picture.loadfromfile 事件不是虚拟的,如何在子类中实现重载呢?
      

  4.   

    override 不是重载吗?仁兄能不能详细谈一下这里面的这个override的含义呢?
      

  5.   

    报歉,是我看错了。不过这个overload可以在这种情况下使用呢?毕竟它的父类没有声明为虚拟或动态。
      

  6.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      protected
        procedure UpdateWindowState;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      UpdateWindowState;
    end;procedure TForm1.UpdateWindowState;
    begin
      inherited;  ShowMessage('ok');
    end;end.
    请看:TCustomForm.UpdateActions;只需要在你的UpdateActions中inherited就OK!