Fórum Trabalhando com retorno da função #410155
03/12/2011
0
Por gentileza, gostaria em saber qual é a lógica de uma função do tipo integer, que tenha você setar em seu parametro um SetLength, que o retorno da função seja em seu próprio parametro? Como é feito em algumas funções de impressora fiscal, como exemplo:
SetLength(szDadosImpressora,4);
Seto 4 posições em branco para ser alimentada pela função.
Retorno := Daruma_FI_RetornaErroExtendido ( szDadosImpressora );
Após executar, a variavel szDadosImpressora retorna o status do erro, caso tenha.
Neste caso o retorno da função da daruma é inteiro e a variavel do parametro szDadosImpressora retorna uma string.
Pois consegui fazer isso usando a seguinte situação:
type
TForm1 = class(TForm)
Button1: TButton;
function Função_testeDataHora(var Data: String; var Hora: String): Integer; ---- Repare que usei o var antes no nome
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
procedure TForm1.Button1Click(Sender: TObject);
var teste1, teste2 : String;
begin
Função_testeDataHora(teste1,teste2); ----quando passa pela função a variavel teste1 recebe a data e o teste2 a hora.
end;
function TForm1.Função_testeDataHora(var Data: String; var Hora: String): Integer;
begin
Data:= FormatDateTime(ddmmyyyy,date);
Hora:= FormatDateTime(hhmmss,now);
Result:=1;
end;
Mas que eu quero mesmo saber qual a programação na qual eu consiga obter o mesmo resultado sem ter que informar o var na assinatura?
Tenho mais um exemplo da função da bematech que faz isso, mas como não temos acesso a dll deles não tem como saber qual procedimento eles usaram:
***********exemplo
declaração
function Bematech_FI_DataHoraImpressora(Data: String; Hora: String): Integer; StdCall; External BEMAFI32.DLL;
uso da função
minha procedure;
var Data, Hora : String;
begin
for iConta :=1 to 6 do
begin
Data := Data + ;
Hora := Hora + ;
end;
Obs: antes de passar pela função as variaveis estão somente com espaços em branco
Retorno := Bematech_FI_DataHoraImpressora( Data, Hora );
Obs: após passar pela função a variavel Data e hora já estarão com os valores retornados pela função.
end;
É isso que estou querendo desvendar, se alguém puder me enviar um exemplo, ficarei muito grato!
Ate mais....
Paulo Assis
Curtir tópico
+ 0Posts
05/12/2011
Cauê Nishijima
Acredito que não teria problema nenhum em trocar function por procedure nesses casos.
Os casos de retorno é quanto é preciso ter uma confirmação positiva ou negativa da alteração dos parametros.
ou seja
procedure X(var Y:Integer);
é igual a:
function X:Integer;
Acho que seja isso, corrija-me se estiver errado.
Gostei + 0
05/12/2011
Emerson Nascimento
function TForm1.teste(var data, hora: string): boolean;
begin
try
data := formatdatetime(yyyymmdd, sysutils.Now);
hora := formatdatetime(HH:mm:ss, sysutils.Now);
result := true;
except
result := false;
end;
end;
assim a alteração feita no parâmetro será refletida na variável origem.
e para usar, assim como no exemplo que você passou:
procedure TForm1.Button1Click(Sender: TObject);
var
data, hora: string;
retorno: boolean;
begin
retorno := teste(data, hora);
if retorno then
ShowMessage(data:+data+ hora:+hora);
end;
Gostei + 0
06/12/2011
Paulo Assis
Só que nesse caso eu queria fazer sem usar o var! Porem fiquei sabendo que eu terei que fazer uso de ponteiro! você saberia fazer um exemplo com uso de ponteiro para chegar nesse mesmo resultado?
att
Gostei + 0
15/12/2011
Wilson Junior
procedure TForm1.Button1Click(Sender: TObject); var teste1, teste2: string; begin teste1 := RetData; teste2 := RetHora; end; function TForm1.RetData: string; begin Result := FormatDateTime( ddmmyyyy, Now ); end; function TForm1.RetData: string; begin Result := FormatDateTime( hhmmss, Now ); end;
Espero ter colaborado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)