想了一天的问题,实在想不出,希望有谁能帮帮我!(100分)

  • 主题发起人 主题发起人 jiefeij
  • 开始时间 开始时间
J

jiefeij

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Scrollbox里放了一个Panel置于顶端,下面放了几个DBGRID和Stringgrid等控件。
我希望在移动Scrollbox的水平滚动条时,Panel随着一起移动,在移动垂直滚动条时,
Panel在原位置不动,只是下面的DBGRID和STRINGGRID等控件移动。
 
Panel不要放在ScrollBox中
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
OldWinProc: TWndMethod;
procedure NewWinProc(var Message: TMessage);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.NewWinProc(var Message: TMessage);
begin
case Message.Msg of
WM_HSCROLL: caption := '水平:WM_HSCROLL'; //移动panel
WM_VSCROLL: caption := '垂直:WM_VSCROLL';

end; //end of case
OldWinProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
OldWinProc := ScrollBox1.WindowProc;
ScrollBox1.WindowProc := NewWinProc;
end;

end.
 
to Shuzi:
但是Panel里放的是下面显示内容的标题,要随下面的内容水平滚动时滚动
 
ScrollBox1 顶端放一Panel
ScrollBox1 的下方再放一ScrollBox2
ScrollBox2 中放其它控件。

隐藏ScrollBox1 的垂直滚动条,显示水平滚动条
显示ScrollBox2 的垂直滚动条,隐藏水平滚动条
 
to zw84611:您的方法可能是可行的,不过不好意思,我不知道捕获到那个消息
后怎样禁止Pane不随着一起移动。能不能详细点。
 
to jsxjd:这个方法试过,不行!
 
faint..., Panel的移动是你自己改变Panel.Left实现的,你不改变时,它就不动了呗。
 
to zw84611:不好意思,您可能误解了我的意思,我说的是PANEL随着滚动条滚动,
并不是left改变吧。
 
to zw84611:不好意思,您可能误解了我的意思,我说的是PANEL随着滚动条滚动,
并不是left改变吧。
 
我懂你的意思了。似乎不太好办。把jsxjd和我的方法结合起来试试。
 
谢谢各位,我的问题解决了,
把PANEL置于最前面(也就是PANEL.BRINGTOFRONT),然后在SCROLLBOX的OnCanResize事件
中写上PANEL.TOP:=0就可以了
不过有点闪动,先这样了,各位如有更好的方法,不要忘了
告诉我一声。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
810
DelphiTeacher的专栏
D
D
回复
0
查看
757
DelphiTeacher的专栏
D
D
回复
0
查看
837
DelphiTeacher的专栏
D
后退
顶部