Search code examples
delphionmousemove

OnMouseMove without object inspector delphi


my application has 350 edit fields and all of them shall have an OnMouseMove event. I have generated this code for all of them:

...

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;    
...

But I didn't go to the object inspector to doubleclick OnMouseMove. Is there a way to make this work without the object inspector. Do you have an example line of code that would make it work for the first edit field?


Solution

  • You can create it once and assign it in code yourself:

    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;
    

    If you want to assign the same one to every TEdit on the form:

    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;