Problemas para acessar Property de uma form

Delphi

12/07/2010

olá pessoal, eu tentando acessar propriedade de um form  que é chamado de uma bpl dinamica, só que como
não tenho acesso direto a class Tfrmbpl, não consigo acessar as suas propertys.

segue abaixo o codigo utilizado,  as property tem que receber os dados antes do showmodal.

var
  H: HMODULE;
  PForm: TFormClass;
  Form: Tform;
begin
  if FileExists(C_DPKESTOQUE) then
  begin
    H := LoadPackage(C_DPKESTOQUE);
    if H > 0 then
    begin
      PForm := TFormClass(GetClass('Tfrmbpl'));
      if Assigned(PForm) then
      begin
        Form := TFormClass(Pform).Create(self);

        Form.ShowModal;
        FreeAndNil(Form);
        UnloadPackage(H);
      end
      else
        ShowMessage('Erro ao carregar classe');
    end
    else
      ShowMessage('Erro ao carregar pacote');
  end
  else
  begin
    MessageDlg('Para usar este recurso você precisa do adquirir o module.' #13
                'Entre em contato com o fabricante',mtWarning,[mbOK],0);
  end;

Igo Oliveira

Igo Oliveira

Curtidas 0

Respostas

Marco Salles

Marco Salles

12/07/2010

olá pessoal, eu tentando acessar propriedade de um form  que é chamado de uma bpl dinamica, só que como
não tenho acesso direto a class Tfrmbpl, não consigo acessar as suas propertys.

  hummmm   Pq vc não usa RTTI ??? Não daria ???   type
//referencia a um método
  TMinhaProcedure = procedure of object;
var
  H: HMODULE;
  PForm: TFormClass;
  Form: Tform;
 
  //RTTI
  Classe: TFormClass;
  Ct:TRttiContext;
  Tipo:TRttiType;
  Met:TRttiMethod;

begin
  if FileExists(C_DPKESTOQUE) then
  begin
    H := LoadPackage(C_DPKESTOQUE);
    if H > 0 then
    begin
      PForm := TFormClass(GetClass('Tfrmbpl'));
      if Assigned(PForm) then
      begin
        Form := TFormClass(Pform).Create(self);
 
        Classe := TFormClass(FindClass('Tfrmbpl'));
 
       Tipo:=CT.GetType(Classe);
           for Met in Tipo.GetMethods do
              if Met.Name = 'Nome do Methodo que vc quer acessar' then //declarado no Published
                  begin
                     DadosMetodo.Data := Pointer(form);
                     DadosMetodo.Code := objeto.MethodAddress(Met.Name);
                     if not Assigned(DadosMetodo.Code) then
                        Exit;
                     CorpoMetodo := TMinhaProcedure(DadosMetodo);
                     CorpoMetodo;
                  end;

        Form.ShowModal;
        FreeAndNil(Form);
        UnloadPackage(H);
      end
      else
        ShowMessage('Erro ao carregar classe');
    end
    else
      ShowMessage('Erro ao carregar pacote');
  end
  else
  begin
    MessageDlg('Para usar este recurso você precisa do adquirir o module.' #13 
                'Entre em contato com o fabricante',mtWarning,[mbOK],0);
  end;
GOSTEI 0
Marco Salles

Marco Salles

12/07/2010

.. Para Property o Metodo é parecido   Segue abaixo talves seje útil  
olá pessoal, eu tentando acessar propriedade de um form  que é chamado de uma bpl dinamica, só que como
não tenho acesso direto a class Tfrmbpl, não consigo acessar as suas propertys.

  hummmm   Pq vc não usa RTTI ??? Não daria ???    
var
  H: HMODULE;
  PForm: TFormClass;
  Form: Tform;
 
  //RTTI
  Classe: TFormClass;
  Ct:TRttiContext;
  Tipo:TRttiType;
  Prop:TRttiProperty;  

begin
  if FileExists(C_DPKESTOQUE) then
  begin
    H := LoadPackage(C_DPKESTOQUE);
    if H > 0 then
    begin
      PForm := TFormClass(GetClass('Tfrmbpl'));
      if Assigned(PForm) then
      begin
        Form := TFormClass(Pform).Create(self);
 
        Classe := TFormClass(FindClass('Tfrmbpl'));
 
       Tipo:=CT.GetType(Classe);
           for Prop in Tipo.GetProperties do
              if Prop.Name = 'Nome da propriedade' then //declarado no Published
                  begin
                       Prop.SetValue(form,'Setando a Propriedade');  ****Aqui Hooooooooo
                  end;

        Form.ShowModal;
        FreeAndNil(Form);
        UnloadPackage(H);
      end
      else
        ShowMessage('Erro ao carregar classe');
    end
    else
      ShowMessage('Erro ao carregar pacote');
  end
  else
  begin
    MessageDlg('Para usar este recurso você precisa do adquirir o module.' #13 
                'Entre em contato com o fabricante',mtWarning,[mbOK],0);
  end;
GOSTEI 0
Igo Oliveira

Igo Oliveira

12/07/2010

Valeu, funfou blz
GOSTEI 0
POSTAR