应该给Edit1的onExit属性设置一个TNotifyEvent类型的值。TNotifyEvent的定义如下:
type
  TNotifyEvent = procedure(Sender: TObject) of object;
因此,你的DoExit过程应该这样写:
procedure DoExit(Sender: TObject);
begin
...
end;你上面写的function DoExit(?):?是错误的,肯定通不过编译。

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure doExit(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.doExit(Sender: TObject);
    begin
        ShowMessage('Edit1 Exit');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    Edit1.onExit:=doExit;
    end;end.
      

  2.   

    ChipHead:
      能否给一个带多点源码的?
    blucecat:
      不想这样写。
    procedure doExitCheck(Sender: TObject);
    begin
        ShowMessage('Edit1 Exit');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    Edit1.onExit:=doExitCheck;
    end;注意:procedure doExitCheck(Sender: TObject);不是类成员函数。今天我这样实现了procedure DoExitCheck(Sender: TObject);
    begin
        showmessage('333');  //没问题
        sender.ClassName ;   //有问题
    end;procedure  TDateWindow.Button6Click(Sender: TObject);
    var
      proc: procedure(Sender :TObject) of object;
    begin
      @proc:=@DoExitCheck;
      Edit1.OnExit :=proc;
    end;为什么访问sender参数时有问题?
      

  3.   

    >    showmessage('333');  //没问题
    >    sender.ClassName ;  //有问题    showmessage( (sender as TEdit).classname);
                      ^^^^^^^^^^^^^^^^    
      

  4.   

    tull:
      编译一下你就知道了,Sender变量访问不了。