2013-12-16 7 views
1

개체가 할당 된 양식의 이름을 반환하는 프로 시저를 만들고 싶습니다. 예를 들면 다음과 같습니다.Delphi에서 객체의 소유자를 찾는 방법은 무엇입니까?

저는 TPanel이 있고 TPanel 하나의 TButton 안에 있습니다. TButton의 함수 이름에 매개 변수로 전달하고 함수가이 버튼이 어디에 있는지 formuário의 이름을 반환하도록합니다.

어떻게합니까?

LE는 :

function TForm1.DoSomething(Obj: TComponent): String; 
var AClass : String; I : Integer; 
begin 
AClass := TComponent(Obj).Owner.ClassName; 
if (AClass = 'TForm') then 
    Result := TComponent(Obj).Name 
else 
Result := TComponent(Obj).Owner.Name; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
NomeForm := DoSomething(Button3); 
ShowMessage(NomeForm); 
end; 

procedure TForm1.Button4Click(Sender: TObject); 
begin 
NomeForm := DoSomething(Form1); 
ShowMessage(NomeForm); 
end; 
+0

구성 요소 이름을 살펴보십시오하는 다른 형태를 통해 소유자 양식의 범위 내에서 고유 아닌 것으로 적용됩니다. 응용 프로그램의 다른 양식에 같은 이름의 단추가 여러 개있을 수 있습니다. –

+0

개체에 소유자가 없으면 어떻게됩니까? 아니면 주인이 양식이 아닐까요? –

+1

"소유권"이 당신이 말하는 것을 말하는 것처럼 들리지 않습니다. 나에게 "부모"컨트롤 (또는 부모가 폼이 ​​아닌 경우 부모의 부모)을 원하는 것처럼 들립니다. – Sam

답변

1

여기에 당신이 언급 한 동일한 조건의 간단한 예입니다. 패널의 단추로 폼의 이름을 반환합니다. 기능 ReturnForm, 포르투갈어에서 영어로 번역 :)으로

function TForm22.ReturnForm(aParent: TWinControl): TWinControl; 
begin 
    Result:= nil; 
    if aParent <> nil then 
    begin 
    if aParent.Parent <> nil then 
     Result:= ReturnForm(aParent.Parent) 
    else 
     Result:= aParent; 
    end; 
end; 

procedure TForm22.Button1Click(Sender: TObject); 
begin 
    Showmessage(ReturnForm(Button1).Name); 
end; 

주의 형태를 발견 할 때까지 반복적으로