下面的代码是错误的怎么能实现下面的代码呢?
procedure edshow(eda,edb:tedit);
procedure EdaKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  begin
   if key=vk_return then
     showmessage('enter');
  end;
procedure EdbKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  begin
    if key=vk_down then
     showmessage('down');
  end;
begin
  eda.OnKeyDown:=edakeydown;
  edb.OnKeyDown:=edbkeydown;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  edshow(edit1,edit2);
end;

解决方案 »

  1.   

    type
      TForm1 = class(TForm)
        ...
        private
          ...
          procedure edshow(eda,edb:tedit);
          procedure EdaKeyDown(Sender: TObject; var Key: Word; 
      Shift: TShiftState);
          procedure EdbKeyDown(Sender: TObject; var Key: Word; 
      Shift: TShiftState); 
          ...
      end;procedure TForm1.EdaKeyDown(Sender: TObject; var Key: Word; 
      Shift: TShiftState); 
      begin 
      if key=vk_return then 
        showmessage('enter'); 
      end;
     
    procedure TForm1.EdbKeyDown(Sender: TObject; var Key: Word; 
      Shift: TShiftState); 
      begin 
        if key=vk_down then 
        showmessage('down'); 
      end; procedure TForm1.edshow(eda,edb:tedit); begin 
      eda.OnKeyDown:=edakeydown; 
      edb.OnKeyDown:=edbkeydown; 
    end; procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      edshow(edit1,edit2); 
    end; 
      

  2.   

    OnKeyDown 是一个procedure of Object,即它需要的是一个类方法,所谓类方法,跟一个静态过程的差别是,在调用类方法的时候会推入一个self指针。
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);  procedure EdbKeyDown(Instance, Sender: TObject; var Key: Word;
        Shift: TShiftState);
      begin
        if key=vk_down then
          showmessage('down');
      end;var
      Event: TMethod;
    begin
      Event.Code := @EdbKeyDown;
      Event.Data := Edit1;
      Edit1.OnKeyDown := TKeyEvent(Event);
    end;