2013-12-16 3 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; 

Тщательный с переводами с португальского на английский язык :)

Смежные вопросы