ScrollBox 里放一个 panel 鼠标滚轮消息被panel截了,如何在发给ScrollBox

nathan8467 2006-12-22 05:49:54
如题,我做了控件要有滚动条,但是ScrollBox里要放panel。在panel上进行鼠标滚轮操作都被panel给截了,ScrollBox得不到消息,请问怎么再发给panel
...全文
261 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天揽月 2007-01-09
  • 打赏
  • 举报
回复
sanmaotuo(老冯) 正解 接分
nathan8467 2006-12-31
  • 打赏
  • 举报
回复
对不起这段时间比较忙,忘了结帖了,问题解决了,多谢
老冯 2006-12-25
  • 打赏
  • 举报
回复
马上给你写个范例
nathan8467 2006-12-25
  • 打赏
  • 举报
回复
换句话说就是如何能获得给panel的鼠标消息,并且能知道哪些是鼠标滚轮的
老冯 2006-12-25
  • 打赏
  • 举报
回复
原理都是如此, 你可以根据你的实际情况和要求进行修改
老冯 2006-12-25
  • 打赏
  • 举报
回复
type
TFormDemo = class(TForm)
ScrollBox: TScrollBox;
Panel: TPanel;
procedure FormCreate(Sender: TObject);
private
OldScrollBoxWindowProc: TWndMethod;
procedure NewScrollBoxWindowProc(var Message: TMessage);
procedure OnMessageOwn(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;

var
FormDemo: TFormDemo;

implementation

{$R *.dfm}

{ TFormDemo }

procedure TFormDemo.NewScrollBoxWindowProc(var Message: TMessage);
var
Pace: Integer;
begin
if Message.Msg = WM_MouseWheel then
begin
Pace := Message.wParam ;
if Pace > 120 then
ScrollBox.VertScrollBar.Position := ScrollBox.VertScrollBar.Position + 10
else
ScrollBox.VertScrollBar.Position := ScrollBox.VertScrollBar.Position - 10;
end;
OldScrollBoxWindowProc(Message);
end;

procedure TFormDemo.FormCreate(Sender: TObject);
begin
OldScrollBoxWindowProc := ScrollBox.WindowProc;
ScrollBox.WindowProc := NewScrollBoxWindowProc;
Application.OnMessage := OnMessageOwn;
end;

procedure TFormDemo.OnMessageOwn(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = WM_MOUSEWHEEL then
begin
SendMessage(ScrollBox.Handle, WM_MouseWheel, HiWord(Msg.wParam), Msg.lParam);
Handled := False;
end;
end;

-----------------------------------

上面是截获滚轮消息并传递给ScrollBox, 滚动的步长我设为10
wlp555ren 2006-12-22
  • 打赏
  • 举报
回复
直接发给Panel,有两个滚动消息,Panel接到后,如果有滚动条,它就会执行。。
你试试。。查控制滚动条的资料。。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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