scrollbox中的控件在获得焦点时,如果控件在显示区域外,scrollbox会自动滚动到焦点控件上,如何禁止这种自动滚动?

解决方案 »

  1.   

    scrollbox1.AutoScroll := false;
      

  2.   

    to: lihuasoft(学习低调做人) 
    这样修改滚动条就没有了,我还想让滚动条存在
      

  3.   

    你肯定是想要消息拦截之类的实现代码,但是,其实下面这样简单地处理效果看起来是一样的:procedure TForm1.Button2Click(Sender: TObject);
    begin
      ScrollBox1.AutoScroll := False;//滚动条消失
      Button3.SetFocus;//得到焦点
      ScrollBox1.AutoScroll := True;//滚动条又有了,但却没有滚动
    end;可以吗?
      

  4.   

    效果是可以实现,但我总不能点击button2来设置button3的setfocus吧
      

  5.   

    哦,你的意思是用TAB转移焦点?哦,那还真得不行呢... 不过,你的这个需求,有点怪怪的... 能详细讲一下你的需求吗?这样说:“比如说.....”
      

  6.   

    比如说一个from上放了两个listview,一上一下,窗体上显示不下就会出现一个滚动条,现在点击下面的listview,下面的listview获得焦点后窗体滚动条就会自动跳到最下面,下面的listview就会显示完整.这样就感觉跳来跳去的.现在我是不想在选择listview的时候有滚动条跳来跳去的效果.
      

  7.   

    下面这个例子中,我没有用ListView试验,只是用几个Edit试验的,你试一下行不。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        ScrollBox1: TScrollBox;
        Button1: TButton;//注意这个Button和下面的几个Edit都是在ScrollBox里的。
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Timer1: TTimer;
        procedure WhenFocus(sender:tobject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}var
      B : boolean;procedure TForm1.WhenFocus(Sender : TObject);
    begin
      with TWinControl(Sender) do
        begin
        if Left + Width > ScrollBox1.Width then
          begin
          ScrollBox1.AutoScroll := False;
          B := True;
          Timer1.Enabled := True;
          end;
        end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      button1.OnEnter := WhenFocus;
      edit1.OnEnter := WhenFocus;
      edit2.OnEnter := WhenFocus;
      edit3.OnEnter := WhenFocus;
      Timer1.Interval := 10;
      Timer1.Enabled := false;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if B then ScrollBox1.AutoScroll := True;
      Timer1.Enabled := False;
    end;end.
      

  8.   

    把3个Edit中的任一二个拖到SCrollBox里的不可见区域。运行后,按下TAB键转移焦点。
      

  9.   

    我是把Edit往右拖试验的,不是上下拖遮起来....俺没招了....撤了.....
      

  10.   

    to: lihuasoft(学习低调做人) 
    哈哈,谢谢你,看看其他朋友有没有办法,要是有人解决了我结帖的时候一样给你分,非常感谢你的帮忙.
      

  11.   

    to: lihuasoft(学习低调做人) 
    哥们,问题解决了,谢谢你