Array
(
)

Função retornar um Array

Marcotema
   - 01 set 2004

Boa tarde a todos.

Existe como uma função retornar um array?


Rafs
   - 01 set 2004

Você poderá fazer da seguinte maneira.

Crie um Tipo, abaixo da cláusula type e defina como um array (de algum tipo)
Depois crie a função e defina o resultado dela do tipo que você criou.

Segue um código exemplo (estou enviando a unit completa)

#Código


unit Unit1;

interface

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

type
TResultArray = array of string; //<== Definição do tipo
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
function RetornarArray(FParametro: integer): TResultArray;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.RetornarArray(FParametro: integer): TResultArray;
var
i: integer;
begin
if FParametro > 0 then
begin
SetLength(Result, FParametro);
for i := 0 to FParametro - 1 do
begin
Result[i] := ´Pos´+IntToStr(i);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
lCaracteres: TResultArray;
begin
Setlength(lCaracteres, 10);
lCaracteres := RetornarArray(10);
ShowMessage(´´);
end;

end.


Coloque um BreakPoint na linha ShowMessage e você verá o conteúdo de lCaracteres. Que deverá ser: ´Pos0´, ´Pos1´, ´Pos2´, ´Pos3´, ´Pos4´, ´Pos5´, ´Pos6´, ´Pos7´, ´Pos8´, ´Pos9´

Se precisar trabalhar com outro conteúdo, basta alterar o tipo do array do novo Tipo que você criou


Vinicius2k
   - 01 set 2004

Colega,

Um outro exemplo, um pouco diferente :
#Código

// Declarando o tipo dinamico... 
type
TMeuArray = Array of Integer;

{ **** }

// Declarando a função que retorna meu tipo
// dinamico... O parametro eh soh um exemplo...

function RetornaArray(MeuParam: Integer): TMeuArray;
var i: Integer;
begin

// Definindo o tamanho do Array -- isto é necessário.
SetLength(Result,10);

// Só um exemplo para preencher o Result...
for i:= 0 to 9 do
Result[i]:= MeuParam + i;

end;

{ **** }

procedure TForm1.Button1Click(Sender: TObject);
var MeuRetorno: Integer;
begin

// buscando o retorno... note que vc dará também um índice
// para o retorno da função como faria num array convencional...
MeuRetorno:= RetornaArray(200)[4];

// Um teste simples do retorno...
ShowMessage(IntToStr(MeuRetorno));

end;


T+


Marcotema
   - 01 set 2004

Valeu, obrigado pela dica.


Marcotema
   - 01 set 2004

Valeu, obrigado pela dica.