1

私のアプリケーションには 350 個の編集フィールドがあり、それらすべてに OnMouseMove イベントが必要です。私はそれらすべてに対してこのコードを生成しました:

...

type

...    
procedure Edit1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure Edit2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);    
...

implementation

{$R *.dfm}

...    
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,  
  Y: Integer);  
begin 
  Edit1.SetFocus(); 
end;

procedure TForm1.Edit2MouseMove(Sender: TObject; Shift: TShiftState; X,  
  Y: Integer);
begin 
  Edit2.SetFocus(); 
end;    
...

しかし、OnMouseMove をダブルクリックするためにオブジェクト インスペクタに移動しませんでした。オブジェクトインスペクタなしでこれを機能させる方法はありますか? 最初の編集フィールドで機能するコードの例はありますか?

4

1 に答える 1

9

一度作成して、自分でコードに割り当てることができます。

type
  TForm1=class(TForm)
    procedure EditMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    //...
  end;

implementation

procedure TForm1.EditMouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  CurrEdit: TEdit;
begin
  if (Sender is TEdit) then
  begin
    CurrEdit := TEdit(Sender);
    // Do whatever with CurrEdit
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.OnMouseMove := EditMouseMove;
  Edit2.OnMouseMove := EditMouseMove;
  Edit3.OnMouseMove := EditMouseMove;
end;

フォームのすべてに同じものを割り当てたい場合TEdit

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to ControlCount - 1 do
    if Controls[i] is TEdit then
      TEdit(Controls[i]).OnMouseMove := EditMouseMove;
end;
于 2013-02-17T05:56:23.493 に答える