我的scrollbox里面是动态提取的控件,行数不确定,用两个label来模拟翻页,用SendMessage()翻页时,每点击一下翻三行,我想达到的效果是,向下翻到最后结尾时,控制向下的label变灰,同样,向上翻到最顶时,向上的label变灰,但是不知道该怎么判断是翻到了结尾,请大家指教,先拜大家了!
procedure TForm3.Label1Click(Sender: TObject);
begin
SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_PAGEUP, 0);
end;procedure TForm3.Label2Click(Sender: TObject);
begin
SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);
      if scrollbox1.VertScrollBar.Range - scrollbox1.VertScrollBar.Position + 20 = scrollbox1.Height then
        button1.Enabled:= false
      else
        button2.Enabled:= true;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_PAGEUP, 0);
      if scrollbox1.VertScrollBar.Position = 0 then
        button2.Enabled:= false
      else
      begin
        button1.Enabled:= true;
      end;
    end;
      

  2.   

    晕,把button换成你的lable就行了。
      

  3.   

    ScrollBox的话没必要用消息procedure TForm3.Label1Click(Sender: TObject);
    begin
    ScrollBox1.HorzScrollBar.Position:=ScrollBox1.HorzScrollBar.Position+3;
    end;
      

  4.   

    if scrollbox1.VertScrollBar.Range - scrollbox1.VertScrollBar.Position + 20 = scrollbox1.Height then请问这个20是什么意思,向上翻可以,向下翻翻到底了,但是还是不减
      

  5.   

    procedure TForm3.Label1Click(Sender: TObject);
    begin
      SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_PAGEUP, 0);
      if scrollbox1.VertScrollBar.Position = 0 then
        label1.Enabled:= false
      else
      begin
        label2.Enabled:= true;
      end;
    end;              //这个成功了,向上翻到最后,这个label变灰了
    procedure TForm3.Label2Click(Sender: TObject);
    begin
      SendMessage(ScrollBox1.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);
      if scrollbox1.VertScrollBar.Range - scrollbox1.VertScrollBar.Position + 79 = scrollbox1.Height then
        label2.Enabled:= false
      else
        label1.Enabled:= true;
    end;           //这个不行,翻到最后,还是亮的
      

  6.   

    直接控制ScrollBox1.HorzScrollBar.Position的值就可以了,没什么好解释的,自己试试就知道了
      

  7.   

    回复人: hellolongbin 不行啊,这样更不好控制,sendmessage至少知道翻到最后翻不动了,position可以一直加下去,控制起来更烦
      

  8.   

    真是晕,写代码判断一下不就完了吗?我没找到ScrollBox1.HorzScrollBar最大值的哪个参数,但可以用个变量来替代它:procedure TForm1.Button1Click(Sender: TObject);
    var p:integer;
    begin
        p:=ScrollBox1.HorzScrollBar.Position;
        ScrollBox1.HorzScrollBar.Position:=ScrollBox1.HorzScrollBar.Position+50;
        if p=ScrollBox1.HorzScrollBar.Position then button1.Enabled:=false;
    end;
      

  9.   

    真是晕,写代码判断一下不就完了吗?我没找到ScrollBox1.HorzScrollBar最大值的哪个参数,但可以用个变量来替代它:procedure TForm1.Button1Click(Sender: TObject);
    var p:integer;
    begin
        p:=ScrollBox1.HorzScrollBar.Position;
        ScrollBox1.HorzScrollBar.Position:=ScrollBox1.HorzScrollBar.Position+50;
        if p=ScrollBox1.HorzScrollBar.Position then button1.Enabled:=false;
    end;