荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: duck (我是一棵树), 信区: SoftDev
标 题: [合集]请看看这段处理滚动消息的代码
发信站: 荔园晨风BBS站 (2006年01月15日22:34:58 星期天), 站内信件
☆ 1 ──────────── 我是分割线 ─────────────────☆
发信人: limee (lily), 信区: SoftDev
标 题: 请看看这段处理滚动消息的代码
时 间: 2005年11月04日19:48:06 星期五
下载了一个控件的源代码,注释很少
有些地方没有完全看懂,请帮忙看看
//处理滚动条消息
//返回: 滚动条的Position
function
TCustomHexEdit.DoScroll(
AScrollKind: TScrollKind; Msg: TWMScroll): Integer;
var
BarFlag: Integer;
MaxPos: Integer;
ScrInfo: TScrollInfo;
begin
if AScrollKind = skHorizontal then
BarFlag := SB_HORZ
else
BarFlag := SB_VERT;
FillChar(ScrInfo, SizeOf(ScrInfo), 0);
ScrInfo.cbSize := SizeOf(ScrInfo);
ScrInfo.fMask := SIF_ALL;
GetScrollInfo(Handle, BarFlag, ScrInfo);
MaxPos := ScrInfo.nMax - Integer(ScrInfo.nPage) + 1;
case Msg.ScrollCode of
SB_LINEUP:
if ScrInfo.nPos > ScrInfo.nMin then
begin
Dec(ScrInfo.nPos);
end;
SB_LINEDOWN:
if ScrInfo.nPos < MaxPos then
begin
Inc(ScrInfo.nPos);
end;
SB_PAGEUP:
if ScrInfo.nPos > ScrInfo.nMin then
begin
Dec(ScrInfo.nPos, ScrInfo.nPage);
end;
SB_PAGEDOWN:
if ScrInfo.nPos < MaxPos then
begin
Inc(ScrInfo.nPos, ScrInfo.nPage);
end;
SB_THUMBPOSITION,
SB_THUMBTRACK:
begin
// ScrInfo.nPos := Msg.Pos;
// Msg.Pos是16-bits的, 行数太多时会溢出
ScrInfo.nPos := ScrInfo.nTrackPos;
end;
SB_LEFT:
if ScrInfo.nPos <> ScrInfo.nMin then
begin
ScrInfo.nPos := ScrInfo.nMin;
end;
SB_RIGHT:
if ScrInfo.nPos < MaxPos then
begin
ScrInfo.nPos := MaxPos;
end;
SB_ENDSCROLL:
begin
ScrInfo.nPos := ScrInfo.nPos;
end;
end;
if ScrInfo.nPos < ScrInfo.nMin then
ScrInfo.nPos := ScrInfo.nMin;
if ScrInfo.nPos > MaxPos then
ScrInfo.nPos := MaxPos;
UpdateScrollPos(AScrollKind, ScrInfo.nPos);
Result := ScrInfo.nPos;
end;
☆ 2 ──────────── 我是分割线 ─────────────────☆
发信人: duck (Delphi小王子), 信区: SoftDev
标 题: Re: 请看看这段处理滚动消息的代码
时 间: 2005年11月04日20:38:39 星期五
很长。。看不下去
明天考完试家里回来时给你看看
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店