Como acessar método de uma classe descoberta dinamicamente?
Olá pessoal.
Estou precisando acessar um método de uma classe. O problema é que essa classe eu descubro dinamicamente. Fica assim.
Essa variável oClass vai sempre retornar a classe do form passado como parâmetro. Isso funciona. Mas o compilador não reconhece o método PodeFecharForm, pq a classe é uma variável q ele só vai descobrir em tempo de execução.
Como resolver esse problema?
Tem como forçar o compilador a ignorar uma linha e só verificar em tempo de execução?
Obrigado...
Estou precisando acessar um método de uma classe. O problema é que essa classe eu descubro dinamicamente. Fica assim.
function PodeFechar(pNmForm : String) : Boolean; var oClass : TClass; begin oClass := pgc.Pages[pgc.ActivePageIndex].FindChildControl(pNmForm).ClassType; if (pgc.Pages[pgc.ActivePageIndex].FindChildControl(pNmForm) AS oClass).PodeFecharForm then (...) end;
Essa variável oClass vai sempre retornar a classe do form passado como parâmetro. Isso funciona. Mas o compilador não reconhece o método PodeFecharForm, pq a classe é uma variável q ele só vai descobrir em tempo de execução.
Como resolver esse problema?
Tem como forçar o compilador a ignorar uma linha e só verificar em tempo de execução?
Obrigado...
Wilder_lopes
Curtidas 0
Respostas
Motta
22/03/2005
ué typecast ....
if ....... is TMinhaClass then
TMinhaClass(pgc.Pages[pgc.ActivePageIndex].FindChildControl(pNmForm) AS oClass).PodeFecharForm
seria isto mesmo ??!!
if ....... is TMinhaClass then
TMinhaClass(pgc.Pages[pgc.ActivePageIndex].FindChildControl(pNmForm) AS oClass).PodeFecharForm
seria isto mesmo ??!!
GOSTEI 0
Wilder_lopes
22/03/2005
Ola Motta.
Mas a idéia é justamente fazer algo genérico, onde eu não precise fazer um if pra cada classe q tenho.
Eu consegui resolver utilizando um método que é padrão em todos os objetos descendentes de TCustomForm, q é o CloseQuery.
Serviu pro que eu queria, mas de qualquer forma, ainda espero pra saber se alguém sabe como fazer!
Obrigado.
Mas a idéia é justamente fazer algo genérico, onde eu não precise fazer um if pra cada classe q tenho.
Eu consegui resolver utilizando um método que é padrão em todos os objetos descendentes de TCustomForm, q é o CloseQuery.
if (pgc.Pages[pgc.ActivePageIndex].FindChildControl(pNmForm) AS TCustomForm).CloseQuery then (...)
Serviu pro que eu queria, mas de qualquer forma, ainda espero pra saber se alguém sabe como fazer!
Obrigado.
GOSTEI 0
Marcelo Saviski
22/03/2005
Experimente declarar a função [color=darkblue:4e59db687b]PodeFecharForm [/color:4e59db687b]como [b:4e59db687b]published[/b:4e59db687b], ai vc acha assim:
var AObject: TObject; FunctionPodeFechar: function: Boolean of Object; PodeFechar: Boolean; begin AObject := pgc.Pages[pgc.ActivePageIndex].FindChildControl(pNmForm); FunctionPodeFechar := AObject.FindMethod(´PodeFechar´); if Assigned(FunctionPodeFechar) then PodeFechar := FunctionPodeFechar else PodeFechar := False; if PodeFechar then (...) end;
GOSTEI 0
Wilder_lopes
22/03/2005
Valeu Marcelo.
Vou testar.
Obrigado.
Vou testar.
Obrigado.
GOSTEI 0