怎样在一个Panel上动态新建出指定个数的Shape控件?比如新建出的Shape7我要他们生成7行4列。每行每列间的间距为20个象素,怎么做到?

解决方案 »

  1.   

    var
       aShape: Array[0..4];
       i: Integer;
    定义成数组;
    begin
       for i:=0 to 3 do
       begin
         aSHape[i] := TShape.Create;
         aSHape[i].Parent := Panel1;
         aShape[i].Left := CONST_LEFT;
         if i<>0 then
            aShape[i].Top := aShape[i-1].Top + aShape[i].Height + 20
         else 
            aShape[i].Top := CONST_TOP;
       end;
    end;
      

  2.   

    var
     MyShape:array[1..28] of TShape;
     i,j:integer;
     topdefine,leftdefine:integer;
    begin
     topdefine:=0;leftdefine:=0;
     for i:=1 to 7 do
     begin
      leftdefine:=0;
      for j:=1 to 4 do
      begin
       MyShape[i*j]:=TShape.Create(panel1);
       with MyShape[i*j] do
       begin
        Parent:=panel1;
        Width:=20;
        Height:=20;
        top:=topdefine;
        left:=leftdefine;
       end;
       leftdefine:=leftdefine+40;//20个象素列间距
      end;
      topdefine:=topdefine+40;//20个象素行间距
     end;
    end;
      

  3.   

    to  hkbarton(宁静至远)(西南交大) 您的办法可以!但是我只是举个例子新建7行4列,如果用两个Edit来分别表示行和列呢?每次输入的都不一样,但是行最大不超过15,列最大不超过10。
      

  4.   

    那你把两个for的7和4改为输入就可以了
     for i:=1 to strtoint(edit1.text) do
    ...
      for j:=1 to strtoint(edit2.text) do
    ...具体的限制和异常处理你可以自己处理一下,最好不要象上面的直接strtoint了,上面是个例子