如何得到scrollbar的横竖那个移动滑块的移动距离!!请求各位大侠告诉我答案!!

解决方案 »

  1.   

    用API函数unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        ScrollBar1: TScrollBar;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    //返回TMemo中的水平和垂直ScrollBar的距离
    showmessage(inttostr(GetScrollPos(memo1.Handle,SB_HORZ)));
    showmessage(inttostr(GetScrollPos(memo1.Handle,SB_VERT)));
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    //返回TScrollBar的距离
    showmessage(inttostr(ScrollBar1.Position));
    end;end.
      

  2.   

    GetScrollPos(Handle,SB_HORZ)
    GetScrollPos(Handle,SB_VERT)但是不能用于TWebbrowser
      

  3.   

    Twebbrowser要通过里面的网页元素得到滚动条的情况,
    如 WebBrowser1.OleObject.Document.Body.scrollHeight
      

  4.   

    var   
          P1,P2:integer;   
      begin   
          P1:=GetScrollPos(StringGrid1.Handle,   SB_VERT);//取垂直滚动条的位置   
          //..........发生滚动事件..............   
          P2:=GetScrollPos(StringGrid1.Handle,   SB_VERT);   
          ShowMessage(IntToStr(P2-P1));//这个就是滚动的位置   
      end;
      

  5.   

    var   
          P1,P2:integer;   
      begin   
          P1:=GetScrollPos(StringGrid1.Handle,   SB_VERT);//取垂直滚动条的位置   
          //..........发生滚动事件..............   
          P2:=GetScrollPos(StringGrid1.Handle,   SB_VERT);   
          ShowMessage(IntToStr(P2-P1));//这个就是滚动的位置   
      end;
      

  6.   

    var   
          P1,P2:integer;   
      begin   
          P1:=GetScrollPos(StringGrid1.Handle,   SB_VERT);//取垂直滚动条的位置   
          //..........发生滚动事件..............   
          P2:=GetScrollPos(StringGrid1.Handle,   SB_VERT);   
          ShowMessage(IntToStr(P2-P1));//这个就是滚动的位置   
      end;
      

  7.   

    var   
          P1,P2:integer;   
      begin   
          P1:=GetScrollPos(StringGrid1.Handle,   SB_VERT);//取垂直滚动条的位置   
          //..........发生滚动事件..............   
          P2:=GetScrollPos(StringGrid1.Handle,   SB_VERT);   
          ShowMessage(IntToStr(P2-P1));//这个就是滚动的位置   
      end;
      

  8.   

    TopLeftChanged是每当你的StringGrid的列或行发生滚动时触发的。随便作了一个例子你看看可以计算列滚动了多少。不过在滚动之前你要单击一下bitbtn1,滚动完成以后要单击一下bitbtn2就可以显示出列滚动的数值了。   
      var   
          Form1:   TForm1;   
          OldRow,NewRow,HasScrolled:integer;   
      implementation   
        
      {$R   *.dfm}   
        
      procedure   TForm1.FormCreate(Sender:   TObject);   
      var   
          i,j:integer;   
      begin   
          for   i:=0   to   1000   do   
          begin   
              if   StringGrid1.ColCount<i     then   
                  StringGrid1.ColCount:=StringGrid1.ColCount+1;   
              for   j:=0   to   4     do   
                  StringGrid1.Cells[i,j]:=IntToStr(Random(100));   
          end;   
      end;   
        
      procedure   TForm1.BitBtn1Click(Sender:   TObject);   
      begin   //取出滚动之前的列位置   
          HasScrolled:=0;   
          OldRow:=GetScrollPos(StringGrid1.Handle,SB_HORZ);   
      end;   
        
      procedure   TForm1.StringGrid1TopLeftChanged(Sender:   TObject);   
      begin   
          NewRow:=GetScrollPos(StringGrid1.Handle,SB_HORZ);   
          If   NewRow<>OldRow   then   
          begin   //如果是列滚动的话   
              if   NewRow>OldRow   then   
                  Inc(HasScrolled)   
              else   
                  Dec(HasScrolled);   
              OldRow:=NewRow;   
          end;   
      end;   
        
      procedure   TForm1.BitBtn2Click(Sender:   TObject);   
      begin//显示出滚动了的位置   
          ShowMessage('The   column   has   scrolled:'+IntToStr(HasScrolled));   
      end;
      

  9.   

    TopLeftChanged是每当你的StringGrid的列或行发生滚动时触发的。随便作了一个例子你看看可以计算列滚动了多少。不过在滚动之前你要单击一下bitbtn1,滚动完成以后要单击一下bitbtn2就可以显示出列滚动的数值了。   
      var   
          Form1:   TForm1;   
          OldRow,NewRow,HasScrolled:integer;   
      implementation   
        
      {$R   *.dfm}   
        
      procedure   TForm1.FormCreate(Sender:   TObject);   
      var   
          i,j:integer;   
      begin   
          for   i:=0   to   1000   do   
          begin   
              if   StringGrid1.ColCount<i     then   
                  StringGrid1.ColCount:=StringGrid1.ColCount+1;   
              for   j:=0   to   4     do   
                  StringGrid1.Cells[i,j]:=IntToStr(Random(100));   
          end;   
      end;   
        
      procedure   TForm1.BitBtn1Click(Sender:   TObject);   
      begin   //取出滚动之前的列位置   
          HasScrolled:=0;   
          OldRow:=GetScrollPos(StringGrid1.Handle,SB_HORZ);   
      end;   
        
      procedure   TForm1.StringGrid1TopLeftChanged(Sender:   TObject);   
      begin   
          NewRow:=GetScrollPos(StringGrid1.Handle,SB_HORZ);   
          If   NewRow<>OldRow   then   
          begin   //如果是列滚动的话   
              if   NewRow>OldRow   then   
                  Inc(HasScrolled)   
              else   
                  Dec(HasScrolled);   
              OldRow:=NewRow;   
          end;   
      end;   
        
      procedure   TForm1.BitBtn2Click(Sender:   TObject);   
      begin//显示出滚动了的位置   
          ShowMessage('The   column   has   scrolled:'+IntToStr(HasScrolled));   
      end;