toolbar有100个动态生成的按钮(SpeedButton),我想用两个按钮做成滚动条的效果,点一次显示8个按钮

解决方案 »

  1.   

    直接放100个,或者panel上放100个
    2个按钮去控制容器toolbar或panel的可见部分的x方向位置
      

  2.   

    你应该是需要拖一个 TPageScroller 作为 toolbar 的 parent
      

  3.   

    新建工程、双击工程中的窗体、用下列代码覆盖你的unit1所有内容:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ToolWin, ComCtrls, ImgList, StdCtrls, Buttons;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure ButtonClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationvar ToolBar:TToolBar;
        ToolButton:array[0..99]of TToolButton;
        Button:array[0..1]of TButton;
        btindex:integer;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var i:integer;
    begin
      Width:=623;
      Height:=250;
      Position:=poScreenCenter;
      OnCloseQuery:=FormCloseQuery;
      ToolBar:=TToolBar.Create(self);
      ToolBar.Parent:=Form1;
      ToolBar.Wrapable:=false;
      ToolBar.Height:=44;
    //  ToolBar.Images:=ImageList1; //假如你有这个组件在,则去除注释
      ToolBar.ShowCaptions:=true;
      for i:=99 downto 0 do begin
        ToolButton[i]:=TToolButton.Create(self);
        ToolButton[i].ImageIndex:=i;
        ToolButton[i].Parent:=ToolBar;
        ToolButton[i].AutoSize:=false;
        ToolButton[i].Width:=80;
        ToolButton[i].Caption:='ToolButton'+inttostr(i+1);
      end;
      for i:=8 to 99 do ToolButton[i].Visible:=false;
      for i:=0 to 1 do begin
        Button[i]:=TButton.Create(self);
        Button[i].Parent:=Form1;
        Button[i].Top:=140;
        Button[i].Left:=i*Button[i].Width+100*i+190;
        Button[i].OnClick:=ButtonClick;
      end;
      Button[0].Caption:='上一组';
      Button[0].Enabled:=false;
      Button[1].Caption:='下一组';
    end;procedure TForm1.ButtonClick(Sender: TObject);
    var i:integer;
    begin
      if TButton(Sender).Caption='下一组' then begin
        Button[0].Enabled:=true;
        if btindex<12 then inc(btindex);
        if btindex=12 then Button[1].Enabled:=false;
      end
      else
      begin
        Button[1].Enabled:=true;
        if btindex>0 then dec(btindex);
        if btindex=0 then Button[0].Enabled:=false;
      end;
      for i:=0 to 99 do begin
        if i in [btindex*8..btindex*8+7]then ToolButton[i].Visible:=true
        else ToolButton[i].Visible:=false;
      end;
    end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    var i:integer;
    begin
      ToolBar.Free;
      for i:=0 to 1 do Button[i].Free;
    end;end.