2013-02-17 2 views
1

내 응용 프로그램에는 350 개의 편집 필드가 있으며 모든 필드에 OnMouseMove 이벤트가 있어야합니다. 내가 그들 모두를 위해이 코드를 생성 한 :개체 검사기가없는 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;  
... 

하지만 13. OnMouseMove에서는을 더블 클릭하는 객체 관리자에 가지 않았다. 오브젝트 인스펙터없이이 작업을 수행 할 수있는 방법이 있습니까? 첫 번째 편집 필드에서 사용할 수있는 예제 코드 줄이 있습니까?

+3

350 편집 필드를 형태? 당신은 새를 사용하는 것을 고려 했습니까? –

답변

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; 
+0

이것은 순수한 마법이며 우리에게 많은 노력을 덜어주었습니다. 감사합니다. –

+0

@MichaelMoeller : 켄의 대답을 줄이지 말고, 이것은 전혀 마법이 아닙니다. 당신이 일하는 언어와 IDE를 아는 것입니다. "이 일은 너무나 힘든 일이 아니어야합니다. 더 쉬운 방법이되어야합니다."그리고 그 지식을 얻기 위해 먼 길을가는 조사/인터넷 검색이 있어야합니다. –

+0

아니면 켄이 나중에 쓸거야. :-) –