Как найти владельца по объекту в Delphi?

Я хотел бы создать процедуру, которая возвращает мне имя формы, в которой расположен объект. Например:

У меня есть TPanel и внутри TPanel один TButton. Я передам в качестве параметра имя функции TButton и хочу, чтобы функция возвращала мне имя формы, где находится эта кнопка.

Как?

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; 

2 ответа

Вот простой пример в том же состоянии, которое вы упомянули. Кнопка на панели возвращает имя формы. функция 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;

Осторожнее с переводами с португальского на английский:)

Мне кажется, что процедура GetParentForm объявлено в Forms Устройство делает то, что вы хотите. Взгляни на

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Forms_GetParentForm.html

Другие вопросы по тегам