Ver Mensaje Individual
  #7  
Antiguo 08-10-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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;  //  <<=== Aqui se le dá foco al último control creado (Edit)
    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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-10-2014 a las 22:33:25.
Responder Con Cita