求最少量代码实现DBGrid点击滚动条左右两端移至最左、最右端

NongCunGongLu 2014-10-04 05:52:13
DBGrid不能完全显示时,用户点击横向滚动条的右端箭头,则整页向右移动至右端显示;点击左箭头时,整页移回左极端。
要用WM_HSCROLL消息吗,怎样写呢,多谢
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NongCunGongLu 2014-10-04
  • 打赏
  • 举报
回复
可以用。谢谢
缘中人 2014-10-04
  • 打赏
  • 举报
回复
终于试出来了
  private
    { Private declarations }
    FOldProc: TWndMethod;
    procedure MyProc(var message: TMessage);

create。。
  FOldProc := DBGrid1.WindowProc;
  DBGrid1.WindowProc := MyProc;


procedure TForm3.MyProc(var message: TMessage);
var
  curpos: integer;
  info: TScrollInfo;
begin
  if (message.Msg = WM_HSCROLL) then
  begin
    info.cbSize := SizeOf(TScrollInfo);
    info.fMask := SIF_ALL;
    GetScrollInfo(DBGrid1.Handle, SB_HORZ, info);
    if (info.nPos = 0) and (info.nTrackPos = 0) and (message.WParam = 3) then
      SendMessage(DBGrid1.Handle, WM_HSCROLL, SB_RIGHT, 0)
      // SetScrollPos(DBGrid1.Handle, SB_HORZ, info.nMax, True)
    else if (info.nPos = info.nMax) and (info.nTrackPos = 0) and (message.WParam = 2) then
      SendMessage(DBGrid1.Handle, WM_HSCROLL, SB_LEFT, 0);
    // SetScrollPos(DBGrid1.Handle, SB_HORZ, 0, True);
  end;
  FOldProc(message);
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DBGrid1.WindowProc := FOldProc;
end;
NongCunGongLu 2014-10-04
  • 打赏
  • 举报
回复
引用 1 楼 ksrsoft 的回复:
默认的滚动条效果不能满足吗?
默认滚动条要点击多次(或拖动)才能滚动到边,我想一点左箭头就到最左边,一点右箭头就到最右边。
NongCunGongLu 2014-10-04
  • 打赏
  • 举报
回复
引用 2 楼 ksrsoft 的回复:
是不是类似这样的效果

begin
  
end;
是的,但是我的意思是:点击箭头要多次才能向右翻页至右边;向左同样道理。怎样可以一点左右箭头(滚动条上的),就直接向左或向右到边?
缘中人 2014-10-04
  • 打赏
  • 举报
回复
是不是类似这样的效果
procedure TForm3.Button1Click(Sender: TObject);
begin
  SendMessage(DBGrid1.Handle, WM_HSCROLL, SB_LEFT, 0);

end;

procedure TForm3.Button2Click(Sender: TObject);
begin
  SendMessage(DBGrid1.Handle, WM_HSCROLL, SB_RIGHT, 0);
end;
缘中人 2014-10-04
  • 打赏
  • 举报
回复
默认的滚动条效果不能满足吗?

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧