Retorno de uma function

Delphi

04/05/2004

Como faço pra retornar tres valores de um function, o valores são string, integer e o outro é um real.
Tô perdidaço nisso

Obrigado pela atenção


Salvati

Salvati

Curtidas 0

Respostas

Rômulo Barros

Rômulo Barros

04/05/2004

Transforma tudo para string, concatenando os valores com um ponto (.) entre eles. Daí então, basta fazer uma procedure para desconcatenar (he he) os valores, tendo como ponto de referência o ponto (.) :lol:


GOSTEI 0
Lucas Silva

Lucas Silva

04/05/2004

Tenta fazer com procedure..
procedure Teste(var A: String; B:Integer; C:Real)
begin
  ....
  A := ´Lucas´;
  B := 32;
  C := 43,98;
end;

// e na hora de buscar os valores
//em uma procedure qualquer..

procedure TForm1.....
var A1: String; B1:Integer; C1:Real;
begin
  Teste(A1,B1,C1);
end;



GOSTEI 0
Rômulo Barros

Rômulo Barros

04/05/2004

[quote:52e30c6c05=´Lucas Alves Silva´]Tenta fazer com procedure..
procedure Teste(var A: String; B:Integer; C:Real)
begin
  ....
  A := ´Lucas´;
  B := 32;
  C := 43,98;
end;

// e na hora de buscar os valores
//em uma procedure qualquer..

procedure TForm1.....
var A1: String; B1:Integer; C1:Real;
begin
  Teste(A1,B1,C1);
end;
[/quote:52e30c6c05]

Muito boa a sua solução, Lucas Alves Silva. Está aí uma das maneiras de se passar parâmetros no delphi (Passagem por referência) muito pouco utilizado por programadores..., e que deveria ser dado mais atenção.


GOSTEI 0
Lucas Silva

Lucas Silva

04/05/2004

[quote:8880e29279=´Undeclared Identifier´]Muito boa a sua solução, Lucas Alves Silva. Está aí uma das maneiras de se passar parâmetros no delphi (Passagem por referência) muito pouco utilizado por programadores..., e que deveria ser dado mais atenção.[/quote:8880e29279]

Eu gosto muito de fazer consultas deste tipo, eu acho bem mais facil, do que ficar criando váriaveis globais, e coisa do tipo...
Essa passagem de parâmetros é simples e rápida...


GOSTEI 0
Salvati

Salvati

04/05/2004

Achei muito legal, e acabei lembrando desse modo de chamar procedures, ótimo isso, mas pro colocar td em procedure tá mais enrolado, tenho que iniciar muitas coisas.
Mas achei interessante essa concatenação de strings, já é o que tô mexendo, mas quando quero transformá-lo de string para inteiro ou float ele apresenta erro, dizendo que não é uma variável qeu não pode virar inteiro.
Qaulquer coisa te passo por e-mail pra dar uma olhada, estanho.


GOSTEI 0
Marco Salles

Marco Salles

04/05/2004

Utileze a a palavra chave [b:5f72189763]var[/b:5f72189763], No Contexto da sua Função...Por Exemplo:
Function SeiLaOQue(var a:String, var b:Integer):Real;
begin
a:=Qualquer String;
b:=Qualquer Numero Inteiro;
result:Qualquer Numero Real;
end;


Na Hora De Chamar a Função:
Var 
a:String;
b:Integer;
c:Real;
begin
c:=SeiLaOQue(a,b);
end;



GOSTEI 0
Salvati

Salvati

04/05/2004

legal..valeu de novo...rs
vou implementá-lo daqui a pouco, mas oq há de errado, que fiquei muito curioso agora.
Se souberem o erro me avisem por favor
O código da minha procedure e da minha function estão abaixo:
Function ReadComm:String;
var BytesLidos: DWord;
    f: real;
    ReadStr, tst: String;
begin
  iRet:=ReadFile(hComm, bRead[0], 255, BytesLidos, nil);
  if ord(iRet)=-1 then exit;
  ReadStr:=´´;
//IF bytesLidos > 0 then ShowMessage(inttostr(BytesLidos));
  If BytesLidos > 0 Then
{    For I:=0 To BytesLidos - 1  do
      ReadStr:=ReadStr + chr(bRead[i])
  Else
     FlushComm;
  Result:=ReadStr; }
  begin
  if bRead[0]=255 then
    tst:=formatfloat(´#.00´,(((bRead[2])*2)/3));
    result:=((inttostr(bRead[1]))+´ - ´+(tst));
end;
End;


procedure TfPrincipal.Timer1Timer(Sender: TObject);
var
cStr, s, t: String;
quant, d, e, posi, a: integer;
b: real;
begin
  if not bAberta then begin
     ShowMessage(´PORTA SERIAL ESTA FECHADA !´);
     exit;
  end;
  begin
  cStr:=ReadComm;
  if Length(cStr)>0 then
  posi:=Pos(´-´,cStr);
  quant:=length(cStr);
    a:=strtoint(Copy(cStr,1,((posi)-1)));
  t:=(copy(cStr,((posi)+1),quant));
    Memo1.Lines.Add(cStr);
edit1.Text:=inttostr(a);
    case a of
1:
  begin
    edit1.Text:=inttostr(a);
    edit2.text:=(t);
  end;
2:
  begin
    edit3.text:=inttostr(a);
    edit4.text:=(t);
end;
3:
  begin
    edit5.text:=inttostr(a);
    edit6.text:=(t);
  end;
4:
  begin
    edit7.text:=inttostr(a);
    edit8.text:=(t);
  end;
5:
  begin
    edit9.text:=inttostr(a);
    edit10.text:=(t);
  end;
6:
  begin
    edit11.text:=inttostr(a);
    edit12.text:=(t);
  end;
7:
  begin
    edit13.text:=inttostr(a);
    edit14.text:=(t);
  end;
8:
  begin
    edit15.text:=inttostr(a);
    edit16.text:=(t);
  end;
9:
  begin
    edit17.text:=inttostr(a);
    edit18.text:=(t);
  end;
10:
  begin
    edit19.text:=inttostr(a);
    edit20.text:=(t);
  end;
end;
end;
end;
[/code]


GOSTEI 0
POSTAR