Lo que pretendes tiene solución con punteros, pero el primer campo de cada estructure (record) debe ser del mismo tipo, en este caso String. No nos importa como se llame, lo podemos localizar.
Basado en tu código, podemos definir el parámetro aRecord como un array de punteros. Cada puntero apuntará a un elemento de una estructura.
Código Delphi
[-]
type
TR = record
UNO: string; DOS: CHAR;
end;
PTR = ^TR;
TR3 = record
campo1: string;
DOS: CHAR;
end;
aTR = array of TR;
aTR3 = array of TR3;
PaTR = ^aTR;
TRecods = array of pointer;
PPString = ^PString;
var
Form1: TForm1;
implementation
{$R *.dfm}
function BuscarEnRecord2(aRecord: TRecods; Buscar:string):integer;
var i:integer;
begin
for i:=0 to Length(aRecord) -1 do begin
if (PPString(@aRecord[i])^)^ = Buscar then begin
Result := i;
Exit;
end;
end;
Result := -1; end;
procedure TForm1.Button1Click(Sender: TObject);
var
R0,R1,R2: TR;
PR: TRecods;
Index: integer;
begin
SetLength(PR, 3);
R0.UNO:= 'Hola';
R1.UNO:= 'Caracola';
R2.UNO:= 'Adios';
PR[0]:= @R0;
PR[1]:= @R1;
PR[2]:= @R2;
Index:= BuscarEnRecord2(PR, 'Adios');
if Index >= 0 then
ShowMessage('Eureca ' + IntToStr(Index));
end;
Saludos