Chamar determinada Unit dependendo da situação
Bom dia.
Pretendo separar em unit minhas funções de acesso a ECF conforme a marca.
Assim ficaria:
daruma.pas
bematech.pas
epson.pas
urano.pas
Em cada arquivo, haverá a função Cabecalho, por exemplo.
Como faço para que no meu sistema, conforme o modelo configurado, vá chamar a função daquela unit sem ser necessário eu identificar:
Por exemplo, como:
daruma.cabecalho ou epson.cabecalho
att
Pretendo separar em unit minhas funções de acesso a ECF conforme a marca.
Assim ficaria:
daruma.pas
bematech.pas
epson.pas
urano.pas
Em cada arquivo, haverá a função Cabecalho, por exemplo.
Como faço para que no meu sistema, conforme o modelo configurado, vá chamar a função daquela unit sem ser necessário eu identificar:
Por exemplo, como:
daruma.cabecalho ou epson.cabecalho
att
Mario Inacio
Curtidas 0
Melhor post
Mateus Ribeiro
29/10/2015
Acabei achando uma solução bem interessante pra isso...
Pesquisando um pouco, achei um jeito de vc criar uma função dinamicamente... Olha só!
Primeiro declare esse novo type:
Depois crie uma variável global conforme abaixo, ela será a sua nova função dinâmica.
Agora, em algum evento vc vai declarar de qual biblioteca sua variável newCabecalho vai obter a função! Seguindo o exemplo da máscara que declarei antes, é da função FormatDateTime, então ficaria assim
Pronto, a função newCabecalho é igual a função FormatDateTime... Vc pode usar isso no seu projeto!
Espero que tenha entendido... qualquer coisa pergunta aí!
Pesquisando um pouco, achei um jeito de vc criar uma função dinamicamente... Olha só!
Primeiro declare esse novo type:
type TNodeFunction = function(const Format: string; DateTime: TDateTime): string; // Substitua "function(const Format: string; DateTime: TDateTime): string;" pela máscara da sua função, só usei essa como teste
Depois crie uma variável global conforme abaixo, ela será a sua nova função dinâmica.
newCabecalho: TNodeFunction;
Agora, em algum evento vc vai declarar de qual biblioteca sua variável newCabecalho vai obter a função! Seguindo o exemplo da máscara que declarei antes, é da função FormatDateTime, então ficaria assim
newCabecalho:= SysUtils.FormatDateTime; // Aqui vc deverá fazer aquele "if else" uma unica vez para saber de qual unit deverá ser pego a função.
Pronto, a função newCabecalho é igual a função FormatDateTime... Vc pode usar isso no seu projeto!
Espero que tenha entendido... qualquer coisa pergunta aí!
GOSTEI 1
Mais Respostas
Mateus Ribeiro
29/10/2015
Bom dia! Como vc terá todas as units declaradas na USES, acho que obrigatoriamente vc deverá informar da onde vira a função... A solução que vc quer é tecnicamente "DECLARAR NA USES DINAMICAMENTE (TEMPO DE EXECUÇÃO)", o que creio ser impossível rs.
Te aconselho a fazer alguns "if else" pra saber
e por aí vai!
Te aconselho a fazer alguns "if else" pra saber
if EPSON then epson.cabecalho else if DARUMA then daruma.cabecalho else ......
e por aí vai!
GOSTEI 0
Mario Inacio
29/10/2015
Olá Mateus.
Isso era justamente o que queria evitar, pois ja tenho uma unit com as funções, fazendo um "if" em todas elas.
Isso era justamente o que queria evitar, pois ja tenho uma unit com as funções, fazendo um "if" em todas elas.
GOSTEI 0
Mario Inacio
29/10/2015
Olá Mateus,
É uma solução interessante, vou implementar.
obg pela atenção.
É uma solução interessante, vou implementar.
obg pela atenção.
GOSTEI 0