Hola jars.
Modifiqué el ejemplo anterior para ver si de ese modo se asemeja lo que estás buscando:
Código Delphi
[-]
...
implementation
type
TCtrlRec = record
Frame: TFrame;
Edit : TEdit;
end;
var
vf: array of TCtrlRec;
cont: Integer = 0;
procedure TForm1.btnNewFrameClick(Sender: TObject);
const
COLS: array[0..5] of TColor=(clRed,clYellow,clGreen,clBlack,clBlue,clAqua);
begin
if cont < 6 then
begin
SetLength(vf, Length(vf)+1);
with vf[cont] do
begin
Frame := TFrame.Create(nil);
Frame.Name := Format('Frame%d',[cont+1]);
Frame.Color := COLS[cont];
Frame.Height:= 60;
Frame.Left := 10;
if cont = 0 then
Frame.Top := 10
else
Frame.Top := vf[cont-1].Frame.Top+vf[cont-1].Frame.Height + 10 ;
Frame.Parent:= ScrollBox1;
Edit := TEdit.Create(vf[Cont].Frame);
Edit.Name := Format('Edit%d',[cont+1]);
Edit.Left := 10;
Edit.Top := 10;
Edit.Text := vf[cont].Frame.Name;
Edit.Parent:= vf[cont].Frame;
Edit.SetFocus; end;
end;
Inc(cont);
end;
procedure TForm1.ScrollBox1Resize(Sender: TObject);
var
i: Integer;
begin
procedure TForm1.ScrollBox1Resize(Sender: TObject);
var
i: Integer;
begin
for i:= Low(vf) to High(vf) do
begin
vf[i].Frame.Width:= ScrollBox1.Width - 2*GetSystemMetrics(SM_CXVSCROLL) *
Integer(ScrollBox1.VertScrollBar.Visible);
vf[i].Frame.Left := (ScrollBox1.ClientWidth - vf[i].Frame.Width) shr 1;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for i:= Low(vf) to High(vf) do vf[i].Frame.Free;
Finalize(vf);
end;
Salida:
Como se vé en la imágen, el foco está siempre en el último edit creado.
Para redimensionar horizontalmente el ScrollBox agregué un Splitter (que no se vé en la imágen)
Saludos