Chamar determinada Unit dependendo da situação

Delphi

29/10/2015

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
Mario Inacio

Mario Inacio

Curtidas 0

Melhor post

Mateus Ribeiro

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:
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

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

if EPSON then
   epson.cabecalho
else
if DARUMA then
   daruma.cabecalho
else
......


e por aí vai!
GOSTEI 0
Mario Inacio

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.
GOSTEI 0
Mario Inacio

Mario Inacio

29/10/2015

Olá Mateus,
É uma solução interessante, vou implementar.

obg pela atenção.
GOSTEI 0
POSTAR