托动窗口一问(100分)

  • 主题发起人 主题发起人 Town
  • 开始时间 开始时间
T

Town

Unregistered / Unconfirmed
GUEST, unregistred user!
当我们点取标题栏,托动一个Form时,系统总是先产生一个虚框,把虚框<br>挪到终止位置后,才真正把Form本事挪过来。<br>请问怎样实现象Winamp那样,直接就把Form托到另外的位置上,不会产生<br>虚框?<br>请回答时尽量提供Code,这样俺容易理解些,谢谢!
 
应该涉及到重画的问题吧,win98中还专门有选项,<br>有产生虚框和不产生虚框两种.<br>不过平时没有想到过这种问题...
 
Checks Windows 95/98 的显示设置中的"效果"标签下的"拖动窗口时显示其内容"
 
问题的来源是这样的:<br>&nbsp; &nbsp; 根据一些Tips,我做了一个可以通过点取Client区来移动的圆形Form,<br>但是在托动这个Form时,矩形的虚框就显示了出来,暴露了真实面目,这样<br>很难看。因此,俺就想通过编程,去掉这个虚框,而直接移动Form显示内容。<br>既然Win95和98有这个功能,我想肯定可以通过编程来实现。我总不能期待<br>使用自己程序的人去改系统的设置吧,呵呵。
 
用spy来监视一下,不好意思,今天下午我的东东要demo一下,<br>现在赶着debug,只能做方向上的说明了.
 
用spy来监视一下系统消息,看看有什么不对劲的.<br>不好意思,今天下午我的东东要demo一下,现在赶着debug,只能做方向上的说明了.
 
修改windows设置不能解决根本问题。<br>可以自己实现窗口拖动,这样当然不会出现虚框。<br>下面的程序实现在Client Area 拖动Form:<br><br>procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;<br>&nbsp; Shift: TShiftState; X, Y: Integer);<br>begin<br>&nbsp; MouseCapture:=True;<br>&nbsp; OrignX:=x;<br>&nbsp; OrignY:=y;<br>end;<br><br>procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,<br>&nbsp; Y: Integer);<br>begin<br>&nbsp; if Mousecapture then<br>&nbsp; begin<br>&nbsp; &nbsp; Left:=Left+x-Orignx;<br>&nbsp; &nbsp; Top:=Top+y-Origny;<br>&nbsp; end;<br>end;<br><br>procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;<br>&nbsp; Shift: TShiftState; X, Y: Integer);<br>begin<br>&nbsp; MouseCapture:=false;<br>end;<br>这时,拖动标题栏,还有可能出现虚框。既然是圆形form,可能不大需要标题栏吧?<br>设BorderStyle:=bsNone就没了。<br>一定要有标题栏,那么可以屏蔽标题栏的鼠标消息,比如重载WM_NCLBUTTONDOWN<br>的消息处理函数<br>
 
见者有份.根据贡献大小,分一下,嘻嘻~~<br>呵呵,问了两个问题,200分就放了出去.以后可得省着点花了 :(<br>
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
837
DelphiTeacher的专栏
D
D
回复
0
查看
843
DelphiTeacher的专栏
D
D
回复
0
查看
677
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部