Alterar procedures dinamicamente
Saudações à todos,
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.
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
Curtidas 1
Melhor post
Jucélio Silva
23/01/2019
E ae Cícero, blz cara ,
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
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
GOSTEI 1
Mais Respostas
Cícero Santana
22/01/2019
E ae Cícero, blz cara ,
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
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
Ricardo Araujo
22/01/2019
Ola Cícero Santana,
Neste caso, uma coisa que você poderia tenta usar (TStringList) da uma olhada nisso, acho que irá ajuda bastante no que precisa.
Neste caso, uma coisa que você poderia tenta usar (TStringList) da uma olhada nisso, acho que irá ajuda bastante no que precisa.
GOSTEI 0
Hélio Devmedia
22/01/2019
Cícero, tudo bem?
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:
e depois você atribui ao onClik do botão
espero que eu tenha ajudado...
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
Hélio Devmedia
22/01/2019
Cícero, tudo bem?
Existe 3 manobras que você pode fazer e escolher a melhor delas...
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
Cícero Santana
22/01/2019
Nossa, obrigado, são dicas muito boas.<br />
<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.
<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