我将一个类函数扶植给两个控件的OnKeyDown事件,我在代码中如何比较这两个控件使用的是OnKeyDown是同一个函数?
谢谢!

解决方案 »

  1.   

    看Sender是不行的,我不是在函数内比较,而是在函数外比较后,如果不等于某个函数,重新赋值.
    请大家帮忙
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class( TForm )
        Button1: TButton;
        Button2: TButton;
        B_Check: TButton;
        procedure B_CheckClick( Sender: TObject );
        procedure FormCreate( Sender: TObject );
      private
        P_OnKeyDown1, P_OnKeyDown2: Pointer;
        procedure KE1( Sender: TObject; var Key: Word; Shift: TShiftState );
        procedure KE2( Sender: TObject; var Key: Word; Shift: TShiftState );
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.FormCreate( Sender: TObject );
    begin
      Form1.Button1.OnKeyDown := KE1;
      Form1.Button2.OnKeyDown := KE2;
      //改为 Form1.Button2.OnKeyDown := KE1; 试一下
    end;
    procedure TForm1.B_CheckClick( Sender: TObject );
    begin  P_OnKeyDown1 := @Form1.Button1.OnKeyDown; //检察是否同一例程
      P_OnKeyDown2 := @Form1.Button2.OnKeyDown;  ShowMessage( inttostr( integer( P_OnKeyDown1 ) ) );
      ShowMessage( inttostr( integer( P_OnKeyDown2 ) ) );  if P_OnKeyDown1 = P_OnKeyDown2 then
        ShowMessage( 'YES' )
      else
        ShowMessage( 'NO' );end;procedure TForm1.KE1( Sender: TObject; var Key: Word; Shift: TShiftState );
    begin
      ShowMessage( 'This is KE1' );
    end;procedure TForm1.KE2( Sender: TObject; var Key: Word; Shift: TShiftState );
    begin
      ShowMessage( 'This is KE2' );
    end;end.