动态生成N(N不确定)个PANEL,每行5个,panel上是一篇文章,正常顺序是这样显示的,文章按panel的顺序是可以连贯的读下去的:
panel1   panel2    panel3    panel4     panel5
panel6   panel7    panel8    panel9     panel11
........
现在我的客户要求乱排:
panel13   panel1   panel42   panel62 (随便举个例子)要求,任何一个PANEL,在这个PANEL左右,上下排列的序数都豪无关联,就向一篇文章写在PANEL上,然后打乱,有点类似以前玩的拼图游戏似的,把一个正常的图打乱   大家给看看,写个算法什么的,谢谢

解决方案 »

  1.   

    用Random函数随机生成编号
    const N=40;
    var a:array[0..N+1]of boolean;
        i,m:integer;
        MyPanel:TPanel;
    begin
      Randomize;
      for i:=1 to N do a[i]:=False;
      i:=0;
      repeat
        i:=i+1;
        m:=Random(N+1);
        while a[m] do m:=Random(N)+1;
        a[m]:=true;
        MyPanel:=TPanel.Create(self);
        MyPanel.Parent:=Form1;
        MyPanel.Width:=40;
        MyPanel.Left:=40*i;
        MyPanel.Caption:=Format('Panel%d',[m]);
        MyPanel.Show;
      until i>=N;
    end;
    自己再控制一下Left和Top
      

  2.   

    谢谢:liangqingzhi(老之) ,好样的!感谢!有一问题就是N是不确定的,不是常量,如何修改?
      

  3.   

    N不确定?是指生成Panel的个数也不确定?那样的话N也用Random来生成了。
      

  4.   

    噢,上面的代码有一句错了,m:=Random(N+1);应该是m:=Random(N)+1;就不会有0了