GARANTIR DESCONTO

Fórum Como acessar método de uma classe descoberta dinamicamente? #273662

22/03/2005

0

Olá pessoal.

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

Wilder_lopes

Responder

Posts

22/03/2005

Motta

ué typecast ....

if ....... is TMinhaClass then
TMinhaClass(pgc.Pages[pgc.ActivePageIndex].FindChildControl(pNmForm) AS oClass).PodeFecharForm

seria isto mesmo ??!!


Responder

Gostei + 0

23/03/2005

Wilder_lopes

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.

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.


Responder

Gostei + 0

23/03/2005

Marcelo Saviski

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;



Responder

Gostei + 0

23/03/2005

Wilder_lopes

Valeu Marcelo.

Vou testar.

Obrigado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar