加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何禁用TScrollBox的滚动查看行为?

发布时间:2020-12-15 10:07:02 所属栏目:大数据 来源:网络整理
导读:我有一个TScrollBox,其RichEdit比滚动框大,因此两个侧滚动条都出现在滚动框中.然后我有一个调用RichEdit.SetFocus的函数DoTask. 当我向下滚动到我想要查看部分文本控件的位置,然后调用DoTask时,ScrollBox将自动滚动到RichEdit的顶部.我怎么能避免这种情况?
我有一个TScrollBox,其RichEdit比滚动框大,因此两个侧滚动条都出现在滚动框中.然后我有一个调用RichEdit.SetFocus的函数DoTask.

当我向下滚动到我想要查看部分文本控件的位置,然后调用DoTask时,ScrollBox将自动滚动到RichEdit的顶部.我怎么能避免这种情况?

解决方法

如您所愿,这里有一些建议:

>以下列形式覆盖SetFocusedControl:

function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
begin
  if Control = RichEdit then
    Result := True
  else
    Result := inherited SetFocusedControl(Control);
end;

要么:

type
  TCustomMemoAccess = class(TCustomMemo);

function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
var
  Memo: TCustomMemoAccess;
  Scroller: TScrollingWinControl;
  Pt: TPoint;
begin
  Result := inherited SetFocusedControl(Control);
  if (Control is TCustomMemo) and (Control.Parent <> nil) and
    (Control.Parent is TScrollingWinControl) then
  begin
    Memo := TCustomMemoAccess(Control);
    Scroller := TScrollingWinControl(Memo.Parent);
    SendMessage(Memo.Handle,EM_POSFROMCHAR,Integer(@Pt),Memo.SelStart);
    Scroller.VertScrollBar.Position := Scroller.VertScrollBar.Position +
      Memo.Top + Pt.Y;
  end;
end;

>设置TScrollBox:

type
  TScrollBox = class(Forms.TScrollBox)
  protected
    procedure AutoScrollInView(AControl: TControl); override;
  end;

procedure TScrollBox.AutoScrollInView(AControl: TControl);
begin
  if not (AControl is TCustomMemo) then
    inherited AutoScrollInView(AControl);
end;

要么:

procedure TScrollBox.AutoScrollInView(AControl: TControl);
begin
  if (AControl.Top > VertScrollBar.Position + ClientHeight) xor
      (AControl.Top + AControl.Height < VertScrollBar.Position) then
    inherited AutoScrollInView(AControl);
end;

或者使用上述所有创意组合.你喜欢滚动的方式和时间只有你知道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读