比如说动态创建了名为myedit的edit控件,但是怎么才能写这个edit控件的OnKeyPress的代码呢?我试过定义一个过程类型
TNewKeyPress=procedure(Sender: TObject; var Key: Char) of object;
然后声明
var MyKeyPress:=TNewKeyPress;然后在implementation之后写代码:procedure TForm1.FormCreate(Sender: TObject);
begin
  ........
  myedit.onKeyPress:=MyKeyPress;
  ........
end;procedure MyKeyPress(Sender: TObject; var Key: Char);
begin
  showmessage('hello');
end;就会提示MyKeyPress被重复声明了。呵呵,基础不牢,望各位指教。

解决方案 »

  1.   

    比如说动态创建了名为myedit的edit控件,但是怎么才能写这个edit控件的OnKeyPress的代码呢?
    只需在private里声明MyKeyPress就行了
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ........
      myedit.onKeyPress:=MyKeyPress;
      ........
    end;procedure MyKeyPress(Sender: TObject; var Key: Char);
    begin
      showmessage('hello');
    end;
      

  2.   

    楼上的应该是正确的,你这个
    TNewKeyPress=procedure(Sender: TObject; var Key: Char) of object;
    没有比要。
      

  3.   

    我习惯这样用
    procedure MyKeyPress(Sender: TObject; var Key: Char) of object;
    procedure MyKeyPress(Sender: TObject; var Key: Char);
    begin
      showmessage('hello');
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ........
      myedit.onKeyPress:=MyKeyPress;
      ........
    end;
      

  4.   

    刚刚试了一下SuanAddMiao(算苗) 的方法,先将mykeypress在form1里声明,再给myedit的onkeypress属性赋值,已经OK了。但这样mykeypress就得依附在form1中,我想把mykeypress声明为一个独立的方法应该怎么做?to dacong(大聪):这句procedure mykeypress(Sender: TObject; var Key:char) of object;应该写在什么地方?我在type部分写,提示说[Error] Unit1.pas(23): ';' expected but 'OF' found。
      

  5.   

    1 刚刚试了一下SuanAddMiao(算苗) 的方法,先将mykeypress在form1里声明,再给myedit的onkeypress属性赋值,已经OK了。但这样mykeypress就得依附在form1中,我想把mykeypress声明为一个独立的方法应该怎么做?
    回答:
      mykeypress一定要放在一个单元中,现在你放在了form1中你可以新建一个单元myunit,然后把mykeypress放到里面就得了;2 to dacong(大聪):这句procedure mykeypress(Sender: TObject; var Key:char) of object;应该写在什么地方?我在type部分写,提示说[Error] Unit1.pas(23): ';' expected but 'OF' found。
    回答:
      可以把mykeypress当作以个独立的过程来处理,放在type范围之外就可以了,例如以下写法:
    type
     
     
    end;procedure mykeypress ....
      

  6.   

    直接声明
    procedure mykeypress(Sender: TObject; var Key:char)
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ........
      myedit.onKeyPress:=MyKeyPress;
      ........
    end
    行不行哦!
      

  7.   

    halfdream(哈欠) 说过,控件的方法要在类里,想不依靠其它类,这样定义就行了。当然,声明在Tform1里最直接了。Tmyclass = class
      procedure mykeypress(Sender: TObject; var Key:char)
      end;var
      myclass:Tmyclass;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ........
      myclass:=Tmyclass.create;
      myedit.onKeyPress:=myclass.MyKeyPress;
      ........
    endprocedure Tmyclass.MyKeyPress(Sender: TObject; var Key: Char);
    begin
      showmessage('hello');
    end;