Parametros de Funções

Delphi

28/09/2005

Estou tentando entender a seguinte linha de codigo...
function Impressora(ALote: boolean; out ATodos:boolean ; out AReq :string) : string;

Eu gostaria de saber o porque da utilização do ´OUT´ antes da declaração de um parametro de uma função...

Se possivel, caso haja alguma semelhança entre um e outro tipo de argumento, gostaria de um esclarecimento sobre eles...

Agradeço desde jah a atenção


Tiago Malveira

Tiago Malveira

Curtidas 0

Respostas

Massuda

Massuda

28/09/2005

[quote:48e99c09ff=´Tiago Malveira´]Eu gostaria de saber o porque da utilização do ´OUT´ antes da declaração de um parametro de uma função...[/quote:48e99c09ff]O [b:48e99c09ff]out[/b:48e99c09ff] serve para indicar que o parâmetro irá retornar um valor e que o valor que ele tiver ao ser passado para a function/procedure será desconsiderado; normalmente isso é usado em ActiveX/COM.


GOSTEI 0
Siam

Siam

28/09/2005

Significa que [b:c08cca0c9e]out[/b:c08cca0c9e] é equivalente a [b:c08cca0c9e]var[/b:c08cca0c9e] na saída da função, mas não pode ser utilizado na entrada ?


GOSTEI 0
Massuda

Massuda

28/09/2005

Significa que [b:36769a545d]out[/b:36769a545d] é equivalente a [b:36769a545d]var[/b:36769a545d] na saída da função, mas não pode ser utilizado na entrada ?
Sim... a idéia é essa.


GOSTEI 0
Nigro

Nigro

28/09/2005

function ou procedure com 3 retornos


Olá pessoal
Preciso saber como posso fazer uma função retornar 3 valores, sei que tem algo de var no meio,

mas não sei extatamente como se faz.
Por exemplo, tenho a string: 1.21.3
1 = Matéria
21 = Classificação
3 = Tópico

eu precisaria receber a string gravar esses dados no banco, não posso usar copy, pois a

quantidade de caracteres pode variar: 21.3.144, etc...

function Retorna(pCodigo : String; Var Var1: String) : String;
var
sCodigo : String;
begin
sCodigo := Copy(Edit1.Text, Pos(´.´, Edit1.Text) + 1, Length(pCodigo));
Result := sCodigo;
end;



Obrigado


GOSTEI 0
Massuda

Massuda

28/09/2005

Você pode ter a quantidade de var´s que quiser na lista de parâmetros de uma função. Veja por exemplo a procedure DecodeTime da unit SysUtils...

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);

...ela retorna quatro valores.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/09/2005

há pelo menos três formas:

procedure Retorna(pCodigo: String; var pMateria, pClassificacao, pTopico: String);
var 
  sCodigo : String; 
begin 
  pMateria := Copy(pCodigo, 1, Pos(´.´,pCodigo)-1);
  pCodigo := Copy(pCodigo, Length(pMateria)+1, Length(pCodigo));
  pClassificacao := Copy(pCodigo, 1, Pos(´.´,pCodigo)-1);
  pTopico := Copy(pCodigo, Pos(´.´,pCodigo)+1, Length(pCodigo));
end;

sintaxe:
var
  Materia, Classificacao, Topico: string;
begin
  Retorna(´1.21.3´, Materia, Classificacao, Topico);

  ShowMessage(Materia+#13+Classificacao+13+Topico);
end;


uma outra forma seria criar um record para receber esse retorno:
type
  TRetornoMateria = record
    Materia,
    Classificacao,
    Topico: string;
  end;

function Retorna(pCodigo: String): TRetornoMateria;
var 
  sCodigo : String; 
begin 
  Result.Materia := Copy(pCodigo, 1, Pos(´.´,pCodigo)-1);
  pCodigo := Copy(pCodigo, Length(pMateria)+1, Length(pCodigo));
  Result.Classificacao := Copy(pCodigo, 1, Pos(´.´,pCodigo)-1);
  Result.Topico := Copy(pCodigo, Pos(´.´,pCodigo)+1, Length(pCodigo));
end;

sintaxe:
var
  Retorno: TRetornoMateria;
begin
  Retorno := Retorna(´1.21.3´);

  ShowMessage(Retorno.Materia+#13+Retorno.Classificacao+13+Retorno.Topico);
end;



você poderia ainda utilizar StringList para fazer a separação dos elementos:
var
  Materia, Classificacao, Topico: string;
  Lista: TStringList;
begin
  Lista := TStringList.Create;
  Lista.Delimiter := ´.´;
  Lista.DelimitedText := ´1.21.3´;
  Materia := Lista[0];
  Classificacao := Lista[1];
  Topico := Lista[2];

  ShowMessage(Materia+#13+Classificacao+13+Topico);
end;


entre outras formas...


GOSTEI 0
Adriano Santos

Adriano Santos

28/09/2005

function ou procedure com 3 retornos Olá pessoal Preciso saber como posso fazer uma função retornar 3 valores, sei que tem algo de var no meio, mas não sei extatamente como se faz. Por exemplo, tenho a string: 1.21.3 1 = Matéria 21 = Classificação 3 = Tópico eu precisaria receber a string gravar esses dados no banco, não posso usar copy, pois a quantidade de caracteres pode variar: 21.3.144, etc... function Retorna(pCodigo : String; Var Var1: String) : String; var sCodigo : String; begin sCodigo := Copy(Edit1.Text, Pos(´.´, Edit1.Text) + 1, Length(pCodigo)); Result := sCodigo; end; Obrigado


Não sei se entendi, mas de qualquer forma ai vai:
Use Record, veja o exemplo:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TTeste = Record
    Item1 : String;
    Item2 : Integer;
    Item3 : Double;
end;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    function Retorna(Param1, Param2, Param3 : String) : TTeste;
  end;



var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.Retorna(Param1, Param2, Param3: String): TTeste;
begin
  //seus comandos
  Result.Item1 := ´Teste´;
  Result.Item2 := 100;
  Result.Item3 := 12.00;
end;

end.




GOSTEI 0
Adriano Santos

Adriano Santos

28/09/2005

Demorei pra postar hein? A galera tah rapida aqui...rsrs...


GOSTEI 0
POSTAR