Problemas para acessar Property de uma form
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;
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
Curtidas 0
Respostas
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 ???
typenão tenho acesso direto a class Tfrmbpl, não consigo acessar as suas propertys.
//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
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 ???
não tenho acesso direto a class Tfrmbpl, não consigo acessar as suas propertys.
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
12/07/2010
Valeu, funfou blz
GOSTEI 0