我刚好也在写创建控件的,你的是重叠了啊,自己计算每个panel的位置就行了

解决方案 »

  1.   

    sPnl.Align := alLeft;
    不要这个,自己写sPnl.left:=
      

  2.   

    试试以下代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
        sPnl:TPanel;
    begin
      for i := 1 to 2 do
      begin
        sPnl := TPanel.Create(Self);
        sPnl.Parent := Panel1;
        if i=1
          then sPnl.Align := alLeft
          else begin
            sPnl.left := 400;
            sPnl.Align := alClient;
          end;
        sPnl.Caption := IntToStr(i);
      end;
    end;
      

  3.   

    再修改代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
        sPnl:TPanel;
    begin
      for i := 1 to 2 do
      begin
        sPnl := TPanel.Create(Self);
        sPnl.Parent := Panel1;
        if i=1
          then begin
                 sPnl.Align := alLeft;
                 sPnl.Width := sPnl.Parent.Width div 2;
               end
          else begin
            sPnl.left := sPnl.Parent.Width div 2 +10;
            sPnl.Align := alClient;
          end;
        sPnl.Caption := IntToStr(i);
      end;
    end;
      

  4.   

    设置下spnl2的Left 就可以了
      

  5.   

    看来只有先设置left位置,在设置align。for i := 1 to 2 do
       begin
         sPnl := TPanel.Create(Self);
         sPnl.Parent := Panel1;
         sPnl.Left := i * sPnl.Widths;
         sPnl.Align := alLeft;
         sPnl.Caption := IntToStr(i);
       end;