【问题标题】:OnMouseMove without object inspector delphiOnMouseMove 没有对象检查器 delphi
【发布时间】:2013-02-01 19:32:06
【问题描述】:

我的应用程序有 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。 有没有办法在没有对象检查器的情况下完成这项工作。 您是否有一个示例代码行可以使其适用于第一个编辑字段?

【问题讨论】:

  • 350 在同一个表单上编辑字段?您是否考虑过使用网格?

标签: delphi onmousemove


【解决方案1】:

您可以创建一次并自己在代码中分配:

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;

【讨论】:

  • 这简直是魔法,为我们节省了很多辛苦,谢谢
  • @MichaelMoeller:不是要削弱 Ken 的回答,但这根本不是魔法,这是了解您正在使用的语言和 IDE。一种“不应该这样”的态度辛苦了,应该有更简单的方法”和调查/谷歌搜索对获取这些知识大有帮助。
  • 或者肯给你写。 :-)
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多