我在做图片浏览程序时候遇到两个难点,请各位高手帮帮忙!!
具体叙述如下:
我做了一个根据在EDIT1.TEXT指定的值来确定控件的数目。代码如下:
unit dtym;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);  private
    { Private declarations }
    procedure destroy;
  public
   j:integer;
   aLabel:array of Timage;
   apanel:array of TPanel;
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
varcount,i:integer;begin
   destroy;
   if  Edit1.text='' then begin
   showmessage('请选择个数!!');
   exit;
   end
   else
   count := strtoint(Edit1.text);
   setlength(alabel,count);
   setlength(apanel,count);
   for i:=0 to count-1 do
      begin
        apanel[i]:=TPanel.Create(self);
        apanel[i].Parent:=Panel1;
        apanel[i].Height:=600;
        apanel[i].Width:=250;
      // aPanel[i].align:=alleft;
        aPanel[i].caption:='';
        apanel[i].left:=i*250;
          //apanel[i].Top:=i*500;
        //aLabel[i].Caption:='Label'+IntToStr(i);
        //aLabel[i].top:=i*200;
        aLabel[i]:=TImage.Create(self);
        alabel[i].Parent:=TWincontrol(apanel[i]);
        alabel[i].Height:=400;
        alabel[i].Width:=250;
        aLabel[i].align := alleft;
        aLabel[i].Picture.LoadFromFile('\'+inttostr(i+1)+'.jpg');
        end;
        j:=i;
end;procedure TForm1.destroy;
var
count,i1,i2:integer;
begin
i2:=j;
i1:=0;
for i1:=0 to i2-1 do
begin
 aLabel[i1].Free;
 apanel[i1].Free;
end;end;end.问题是:
1.如果我确定在FORM上每行显示5个控件,多于5个控件的时候,就在第二行显示,>10个的时候在第三行显示,如此类推……,控件的大小通过宽:FORM的宽度/控件个数,高:FORM的高/行数,现在我想知道的是:如何确定控件数目>5后自动换行?
2.在TImage中显示的图片大小不一,如何让图片的大小与TImage的大小相吻合?

解决方案 »

  1.   

    1 参考一下:
    var aPanel:array of TPanel;procedure TForm1.Button1Click(Sender: TObject);
    const N=12;
    var i,x,y:integer;
    begin
       SetLength(aPanel,N);
       x:=0;
       y:=0;
       for i:=0 to N-1 do
         begin
           aPanel[i]:=TPanel.Create(self);
           aPanel[i].Parent:=Form1;
           aPanel[i].Height:=50;
           aPanel[i].Width:=50;
           aPanel[i].Left:=x;
           aPanel[i].Top:=y;
           if (i+1) mod 5 = 0 then
             begin
               y:=y+100;
               x:=0;
             end
           else x:=x+100;
           aPanel[i].Show;
         end;
    end;2  TImage的AutoSize设成True
      

  2.   

    关于换行的问题,老之已经给了代码了,我就不写了,第二个问题,如果image的控件大小已经定下来了,那么让图片自动适应image大小,可以 image1.Stretch :=  true;
      

  3.   

    非常感谢老之和wudi_1982(︻┳═一),我测试一下,如果可以的话,马上结贴