Parametros de Funções
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
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
Curtidas 0
Respostas
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
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
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
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
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
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.
procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);
...ela retorna quatro valores.
GOSTEI 0
Emerson Nascimento
28/09/2005
há pelo menos três formas:
uma outra forma seria criar um record para receber esse retorno:
você poderia ainda utilizar StringList para fazer a separação dos elementos:
entre outras 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
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
28/09/2005
Demorei pra postar hein? A galera tah rapida aqui...rsrs...
GOSTEI 0