程序如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Panel1: TPanel;
    Button2: TButton;
    Button3: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
  procedure MypanelCreate(MachineNum:integer);
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  myPanel:array of TPanel ;
  i:integer;
  page:integer;
implementation{$R *.dfm}
procedure TForm1.MypanelCreate(MachineNum:integer);
var k:integer;
begin
  page:=MachineNum div 4;
  if (MachineNum mod 4<>0) then
  page:=page+1;
 if MachineNum>0 then
 begin
   setLength(mypanel,MachineNum);
   for i:=0 to MachineNum-1 do
   begin
     myPanel[i]:=TPanel.create(self);
     myPanel[i].parent:=form1;
     mypanel[i].SetBounds( 40,120+96*i,185,41);
     //mypanel[i].OnClick:= Button4Click;
     mypanel[i].caption:=IntTostr(i);
     mypanel[i].Color:= clSkyBlue;
     //mypanel[i].Visible:=false;
     if i > 3 then
     begin
      mypanel[i].Visible:=false;
      mypanel[i].SetBounds( 40,120+96*(i-4),185,41);
     end;   end;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MypanelCreate(20);
label1.Caption:=inttostr(page);
end;procedure TForm1.Button3Click(Sender: TObject);
var j:integer;
begin
for j:=0 to 3 do
   begin
   mypanel[j].Visible:=false;
   end;
   for j:=4 to 7 do
   begin
   mypanel[j].Visible:=true;
   end;
end;procedure TForm1.Button2Click(Sender: TObject);
var j:integer;
begin
for j:=4 to 7 do
   begin
   mypanel[j].Visible:=false;
   end;
   for j:=0 to 3 do
   begin
   mypanel[j].Visible:=true;
   end;
end;end.
其中Button2和Button3是上页和下页的意识。我把它写死了,也就是说只能上翻一页和下翻一页。请大家帮我看看如何作到,我给出好多页就翻好多页。我想了好久斗门眼实现。请帮帮我,分好说。谢谢大家

解决方案 »

  1.   

    不知道我对你的意思理解得对不对?每一页的第一页页码是0, 4, 8, 12, ……
    所以
    当前页码为PageIndex, 所以 要设为Visible := true 的panel是 
    PageIndex, PageIndex+1, PageIndex+2, PageIndex+3 
    其他都为falseShowPage(PageIndex :Integer)for k := 0 to PageIndex do
      myPanel[k] := false;for k := PageIndex to PageIndex+4 do 
      myPanel[k] := true;for k := PageIndex to PageMax do
      myPanel[k] := false;
      

  2.   

    更正一下:
    for k := PageIndex to PageIndex+3 do 
      myPanel[k] := true;用全局变量保存当前页码,每次翻页就是加减这页码生成新页码,用新页码代入ShowPage来显示
      

  3.   

    我看你写的东西只有两页吧.....MyPanel[1]-[3]是一页MyPanel[4]-[7]是另一页
      

  4.   

    大概对了的,但每一页显示4个panel,分别是myPanel[0],myPanel[1],myPanel[2],myPanel[3]。按下一页显示4个分别是:myPanel[4] myPanel[5] myPanel[6] myPanel[7] 。然后,如果按上一页又显示0,1,2,3。
      

  5.   

    不知是否这个意思://显示Index开始的4页
    PageTo(Index :Integer)
    begin
    for k := 0 to PageMax do
      myPanel[k] := false;for k := Index to Index+4 do 
      myPanel[k] := true;
    end;
      

  6.   

    操,我也写错了,是Index+3,
    不过意思和楼上差不多
      

  7.   

    pageindex是如何算出来的呢?我只晓得pagemax怎么算
      

  8.   

    windows2000,delphi5下编译通过!unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Label1: TLabel;
        Label2: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
      procedure MypanelCreate(MachineNum:integer);
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      myPanel:array of TPanel ;
      i:integer;
      TotalPage,PageNumber:integer;
    implementation{$R *.dfm}
    procedure TForm1.MypanelCreate(MachineNum:integer);
    var k:integer;
    begin
      Totalpage:=MachineNum div 4;
      if (MachineNum mod 4<>0) then
      totalpage:=totalpage+1;
     if MachineNum>0 then
     begin
       setLength(mypanel,MachineNum);
       for i:=0 to MachineNum-1 do
       begin
         myPanel[i]:=TPanel.create(self);
         myPanel[i].parent:=form1;
         mypanel[i].SetBounds( 40,120+96*i,185,41);
         //mypanel[i].OnClick:= Button4Click;
         mypanel[i].caption:=IntTostr(i);
         mypanel[i].Color:= clBlue;
         //mypanel[i].Visible:=false;
         if i > 3 then
         begin
          mypanel[i].Visible:=false;
          mypanel[i].SetBounds( 40,120+96*(i mod 4),185,41);
         end;   end;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    MypanelCreate(20);
    label1.Caption:=inttostr(totalpage);
    PageNumber:=1;
    label2.Caption:=inttostr(PageNumber);
    end;procedure TForm1.Button3Click(Sender: TObject);
    var j:integer;
    begin
      if PageNumber<Totalpage then
      begin
         for j:=0+(pagenumber-1)*4 to 3+(pagenumber-1)*4 do
         begin
           mypanel[j].Visible:=false;
         end;
         PageNumber:=PageNumber+1;
         label2.Caption:=inttostr(PageNumber);
         for j:=0+(pagenumber-1)*4 to 3+(pagenumber-1)*4 do
         begin
           mypanel[j].Visible:=true;
         end;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var j:integer;
    begin
      if PageNumber>1 then
      begin
         for j:=0+(pagenumber-1)*4 to 3+(pagenumber-1)*4 do
         begin
           mypanel[j].Visible:=false;
         end;
         PageNumber:=PageNumber-1;
         label2.Caption:=inttostr(PageNumber);
         for j:=0+(pagenumber-1)*4 to 3+(pagenumber-1)*4 do
         begin
           mypanel[j].Visible:=True;
         end;
      end;
    end;end.