在一个TForm类的定义部分,在published部分,即private之前的定义控件、事件的部分,自定义一个过程,如procedure aaa(Sender:TObject;var Key:Char);参数部分与KeyPress事件的相同,在窗体内部的含有KeyPress事件的控件中,就可以在属性编辑器中直接选择这个过程作这这一事件的处理过程,小弟有一疑问,Delphi是如何关联特定事件和过程的?就像我们可以手动用代码指定一个事件的处理过程一样:如在如上定义一个键盘处理事件后,可以用Edit1.OnKeyPress:=aaa来指定TEdit1的键盘处理事件就是过程aaa.请高手帮忙,解决心中疑问,如果觉得分不够,我可以再发贴给分。
如果有相关的文章,请转贴,如果有相关的电子书,请给一个书名或地址,小弟在些谢过了。

解决方案 »

  1.   

    Edit1.OnKeyPress:=aaa
    实际是函数指针
      

  2.   

    同意楼上
    procedure TWinControl.KeyPress(var Key: Char);
    begin
      if Assigned(FOnKeyPress) then FOnKeyPress(Self, Key);
    end;
      

  3.   

    Delphi是如何关联特定事件和过程的?
    有两种形式,第一种是你手动写关联代码,就像你说的那样:
    如在如上定义一个键盘处理事件后,可以用Edit1.OnKeyPress:=aaa来指定TEdit1的键盘处理事件就是过程aaa.,相信你应该明白它内部的关联的吧,和二楼写的一样。第二是IDE帮助你关联,你双击对象察看器中的OnKeyPress,那么窗体类中就自动生成一个事件处理函数给你写代码,而这时你却看不到OnKeyPress和那个处理函数关联的代码,即看不到这样的代码:Edit1.OnKeyPress:=aaa。那是因为IDE把关联写到DFM文件中了,所以你看不到
    你这样做:建一个工程,在From1的对象察看器中双击OnKeyPress事件,生成一个事件处理函数。然后在窗体设计器中右击菜单,选View As Text项。则可以看到下面的DFM文件了:object Form1: TForm1
      Left = 158
      Top = 119
      Width = 544
      Height = 375
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      OnKeyPress = FormKeyPress//看到了没有,DFM文件已经帮你关联好了。
      PixelsPerInch = 96
      TextHeight = 13
    end
      

  4.   

    Edit1.OnKeyPress:=aaa
    实际是函数指针
      

  5.   

    谢谢:
    zzllabc(抱朴子--清心释累,绝率忘情) 
    毕竟是带星的高人啊,
    说到心里去了,给分。
      

  6.   

    谢谢:
    zzllabc(抱朴子--清心释累,绝率忘情) 
    linzhengqun(风) 两位高人,
    毕竟是带星的高人啊,
    说到心里去了,给分。
      

  7.   

    楼主你有没有看清楚啊,
    zzllabc(抱朴子--清心释累,绝率忘情) 的话实际上是抄 meiqingsong(阿飛) 
    如果你要给分,应该给meiqingsong(阿飛) 
    千万不要因为他是星就忽视了三角的人。