Fórum Alterar procedures dinamicamente #599941
22/01/2019
0
Eu sou novato no Delphi. Gostaria de saber se é possível realizar alteração em uma procedure no Delphi dinamicamente.Se alguém puder me ajudar ficaria bastante agradecido.
Cícero Santana
Curtir tópico
+ 1Post mais votado
23/01/2019
Se fala alterar o que está escrito na procedure não tem como, o que você deve fazer é criar condições onde seu código se comporte de forma diferente conforme certas situações, posta ai o motivo de modificar a procedure ou function e tentamos ver a alternativa que seria mais cabível, pois acredito que para o questionamento deve haver uma situação com a qual se deparou.
XD
Jucélio Silva
Gostei + 1
Mais Posts
23/01/2019
Cícero Santana
Se fala alterar o que está escrito na procedure não tem como, o que você deve fazer é criar condições onde seu código se comporte de forma diferente conforme certas situações, posta ai o motivo de modificar a procedure ou function e tentamos ver a alternativa que seria mais cabível, pois acredito que para o questionamento deve haver uma situação com a qual se deparou.
XD
Olá Jucélio,
Muito obrigado pela sua resposta, de fato, achava que poderia fazer dessa forma, mas terei que encontrar uma outra para trabalhar. A situação que me fez pensar nessa possibilidade é a seguinte. Estou trabalhando numa aplicação que realiza um calculo a partir de um cenário com x quantidades de objetos. Dependendo de quais objetos sejam inseridos ou quantos, o calculo será diferente, ou seja, nunca será a mesma conta. Talvez eu deva trabalhar com o conceito de herança para resolver isso.
Enfim, agradeço mais uma vez por ter me ajudado. Pelo menos agora eu sei por onde não devo ir.
Um abraço!
Gostei + 0
23/01/2019
Ricardo Araujo
Neste caso, uma coisa que você poderia tenta usar (TStringList) da uma olhada nisso, acho que irá ajuda bastante no que precisa.
Gostei + 0
24/01/2019
Hélio Devmedia
Existe 3 manobras que você pode fazer e escolher a melhor delas:
Uma é a herança como você mencionou... herde classes/formulário e dê um override em cada função ou procedure que você quer que mude, aí você instancia de acordo com sua necessidade, porém isso não é tão dinâmico.
Uma forma mais dinâmica é possível usar nos eventos:
Digamos que o calculo é realizado quando você clica no botão, evento onClick. Cada evento aceita uma procedure com parametros (sender: TObject), então é só você fazer várias procedures com este parâmetro e mudar dinamicamente:
procedure TForm.calculo1(sender: TObject); begin //rotina do calculo 1 end; procedure TForm.calculo2(sender: TObject); begin //rotina do calculo 2 end; procedure TForm.calculo3(sender: TObject); begin //rotina do calculo 3 end;
e depois você atribui ao onClik do botão
if qtdobjetos<10 then
btn1.onClick:=calculo1
else
if qtdObjetos>10 then
btn1.OnClick:=caluclo3
else
btn1.OnClick:=calculo2
espero que eu tenha ajudado...
Gostei + 1
24/01/2019
Hélio Devmedia
Existe 3 manobras que você pode fazer e escolher a melhor delas...
Tem uma outra forma que eu não posso esquecer que é baseado no padrão de projeto Strategy:
Você cria uma classa mae, com um método de calculo e herda um objeto pra cada calculo que você fez, e dentro do sistema você troca de objeto de acordo com a necessidade:
type
TCalculador = class
public
procedure calcular; dynamic; abstract;
end;
TCalculador1 = class(TCalculador)
public
procedure calcular; override; // aí em baixo você escreve o código desse método para o obojeto Calculador1;
end;
TCalculador2 = class(TCalculador)
public
procedure calcular; override; // aí em baixo você escreve o código desse método para o obojeto Calculador2;
end;
TCalculador2 = class(TCalculador)
public
procedure calcular; override; // aí em baixo você escreve o código desse método para o obojeto Calculador3;
end;
e durante o algorítimo vc troca de objeto. imagine que num formulário vc dá um click no botão aí tem o código:
var
c: TCalculador;
begin
if qtdobjetos<10 then
c:=TCalculador1.create;
else
if qtdObjetos>10 then
c:=TCalculador3.create;
else
c:=TCalculador2.create;
c.calcular;
end;
Gostei + 0
25/01/2019
Cícero Santana
<br />
Irei utilizar e acredito que irá sim resolver meu problema. A herança dos cálculos juntamente com o override irão me ajudar sim.<br />
<br />
Quando implementar estarei notificando aqui.<br />
<br />
Muito obrigado mais vez a vocês pelas respostas. Um abraço.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)