Delphi 滚动条的使用介绍

Delphi 滚动条的使用介绍

1、DELPHI的滚动条默认发送消息格式:

1
2
3
4
5
6
function TControl.Perform(
  Msg: Cardinal;
  WParam: WPARAM;
  LParam: LPARAM
): LRESULT;
//如:Memo1.Perform(WM_HSCROLL, SB_LEFT, 0);

 

2、水平/垂直滚动条:

2.1 水平滚动条 消息 WM_HSCROLL

1
2
3
4
5
6
7
SendMessage(Memo1.Handle, WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 50), 0); //滚动至此
SendMessage(Memo1.Handle, WM_HSCROLL, SB_LEFT, 0); //左边缘
SendMessage(Memo1.Handle, WM_HSCROLL, SB_RIGHT, 0); //右边缘
SendMessage(Memo1.Handle, WM_HSCROLL, SB_PAGELEFT, 0); //向左翻页
SendMessage(Memo1.Handle, WM_HSCROLL, SB_PAGERIGHT, 0); //向右翻页
SendMessage(Memo1.Handle, WM_HSCROLL, SB_LINELEFT, 0); //向左滚动
SendMessage(Memo1.Handle, WM_HSCROLL, SB_LINERIGHT, 0); //向右滚动

  

2.2 垂直滚动条 消息 WM_VSCROLL

1
2
3
4
5
6
7
SendMessage(Memo1.Handle, WM_VSCROLL, MAKEWPARAM(SB_THUMBPOSITION, 50), 0); //滚动至此 50为位置 滚动到指定行号
SendMessage(Memo1.Handle, WM_VSCROLL, SB_TOP, 0); //顶部
SendMessage(Memo1.Handle, WM_VSCROLL, SB_BOTTOM, 0); //底部
SendMessage(Memo1.Handle, WM_VSCROLL, SB_PAGEUP, 0); //向上翻页
SendMessage(Memo1.Handle, WM_VSCROLL, SB_PAGEDOWN, 0); //向下翻页
SendMessage(Memo1.Handle, WM_VSCROLL, SB_LINEUP, 0); //向上滚动
SendMessage(Memo1.Handle, WM_VSCROLL, SB_LINEDOWN, 0); //向下滚动

  

3、获得滚动条的位置(GetScrollPos函数)

GetScrollPos函数检索指定滚动条中滚动框(拇指)的当前位置。当前位置是一个相对值,取决于当前滚动范围。
例如,如果滚动范围为0到100,并且滚动框位于条的中间,则当前位置为50。

1
2
3
4
int GetScrollPos(
  HWND hWnd,
  int nBar
);

示例:

1
2
3
4
5
6
7
var
  h, v: Integer;
begin
  h := GetScrollPos(Memo1.Handle, SB_HORZ);
  v := GetScrollPos(Memo1.Handle, SB_VERT);
  Caption := Format('水平数值=%d 垂直数值=%d', [h, v]);
end;

  

4、显示和隐藏滚动条

1
2
ShowScrollBar(Memo1.Handle,SB_HORZ,false); //隐藏MEMO水平滚动条
ShowScrollBar(Memo1.Handle,SB_VERT,false); //隐藏MEMO垂直滚动条

  

5、判断 滚动条是否出现

1
2
3
4
5
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (GetWindowlong(Memo1.Handle, GWL_STYLE) and WS_VSCROLL) > 0 then ShowMessage('垂直滚动条显示');
  if (GetWindowlong(Memo1.Handle, GWL_STYLE) and WS_HSCROLL) > 0 then ShowMessage('水平滚动条显示');
end;

  

创建时间:2019.11.18  更新时间:2020.05.18

 

posted on   滔Roy  阅读(1971)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报

导航

点击右上角即可分享
微信分享提示