Pergunta

É possível usar os registros como um parâmetro de método, e chamá-lo sem declarar implicitamente uma instância do referido registro?

Eu gostaria de ser capaz de escrever código como este.

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);

, em seguida, chamar o método como este ou algo similar.

Foo([('Button1', TButton), ('Lable1', TLabel)]);

Eu ainda estou preso em Delphi 5 pelo caminho.

Foi útil?

Solução

Sim. Quase.

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

function r(i: string; c: TClass): TRRec;
begin
  result.ident     := i;
  result.classtype := c;
end;

procedure Foo(AClasses : array of TRRec);
begin
  ;
end;

// ...
Foo([r('Button1', TButton), r('Lable1', TLabel)]);

Outras dicas

Também é possível trabalhar com uma matriz const, mas não é tão flexível como a solução dada pela "gangph": (Especialmente que você tem que dar o tamanho ([0..1]) da matriz na declaração de matriz. Os registros são anomymous, a matriz não é).

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);
begin
end;

const tt: array [0..1] of TRRec = ((ident:'Button1'; classtype:TButton),
                                   (ident:'Lable1'; classtype:TLabel));

Begin
  Foo(tt);
end.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top