P pingzi Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #1 一个正常的窗口,有最大化、最小化、关闭等按钮,有系统菜单,<br>如何使用户不能用鼠标移动窗口,而菜单、系统按钮正常工作?<br>(又:我试过一个程序,可是运行后标题栏上的系统按钮和菜单都失效了)<br>谢谢!
一个正常的窗口,有最大化、最小化、关闭等按钮,有系统菜单,<br>如何使用户不能用鼠标移动窗口,而菜单、系统按钮正常工作?<br>(又:我试过一个程序,可是运行后标题栏上的系统按钮和菜单都失效了)<br>谢谢!
M microbit Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #4 利用消息WM_NCHITTEST:<br><br>//bcb语法:<br>//在*.h文件中:<br> private:<br> WMNCHITTEST(TWMNCHITTEST &Msg);<br><br>BEGIN_MESSAGE_MAP<br> MESSAGE_HANDLER(WM_NCHITTEST,TWMNCHITTEST,WMNCHITTEST)<br>END_MESSAGE_MAP(TForm)<br><br>////////<br>//在*.cpp<br><br>WMNCHITTEST(TWMNCHITTEST &Msg)<br>{<br>if(Msg.Result==htCaption)<br>Msg.Result=htCaption;<br><br>}<br>//试一下,成功后告诉我<br><br><br><br><br>
利用消息WM_NCHITTEST:<br><br>//bcb语法:<br>//在*.h文件中:<br> private:<br> WMNCHITTEST(TWMNCHITTEST &Msg);<br><br>BEGIN_MESSAGE_MAP<br> MESSAGE_HANDLER(WM_NCHITTEST,TWMNCHITTEST,WMNCHITTEST)<br>END_MESSAGE_MAP(TForm)<br><br>////////<br>//在*.cpp<br><br>WMNCHITTEST(TWMNCHITTEST &Msg)<br>{<br>if(Msg.Result==htCaption)<br>Msg.Result=htCaption;<br><br>}<br>//试一下,成功后告诉我<br><br><br><br><br>
M microbit Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #5 改为:<br><br>if(Msg.Result==htCaption)<br>Msg.Result=htClient;
N netmud99 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #6 我觉得以上各位漏了很重要的一步,就是在按下键的时候,向窗体发送TWMNCHITTEST消息。
P pingzi Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #9 对不起,我在Delphi中试了 microbit 给出的两种语句,都不行,主要是无法操作菜单。
C crystal Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #10 你太悲惨了...消息全部被截了...<br>还有两个笨办法:1.用Border为None,自画菜单,按钮...<br> 2.判断WM_NCHITTEST消息的位置,在菜单范围内就别拦截
你太悲惨了...消息全部被截了...<br>还有两个笨办法:1.用Border为None,自画菜单,按钮...<br> 2.判断WM_NCHITTEST消息的位置,在菜单范围内就别拦截
Z zyy04 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #12 处理form的oncontrainedresize事件。<br><br>在试用时我发现一个有意思的问题:当按下左键时,依次激发onmousedown,onmousemove<br>按下右键时只激发onmousedown;哪位解说一下?
处理form的oncontrainedresize事件。<br><br>在试用时我发现一个有意思的问题:当按下左键时,依次激发onmousedown,onmousemove<br>按下右键时只激发onmousedown;哪位解说一下?
C crystal Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-25 #13 我说的是个笨办法!当WM_NCHITTEST发送时,wParam(或lParam)是鼠标位置,<br>高位是Y,低位是X,取出来...<br>菜单不是在左上角吗?它有一个范围,判断你的鼠标位置,在范围内,.....<br>在范围外,.....<br>明白了吧?但这太笨了,我觉得其他人会有更好办法...
我说的是个笨办法!当WM_NCHITTEST发送时,wParam(或lParam)是鼠标位置,<br>高位是Y,低位是X,取出来...<br>菜单不是在左上角吗?它有一个范围,判断你的鼠标位置,在范围内,.....<br>在范围外,.....<br>明白了吧?但这太笨了,我觉得其他人会有更好办法...
L lccc Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-26 #15 1、一个窗口如果允许它改变大小,则可以变相地移动,即使做到了不能移动窗体,<br>如:把左边框向左拉50,再把右边框向左拉50,不是=向左移动50吗?所以:要不<br>能移动,最好同时不允许改变窗体尺寸。<br>2、一个不计较成本的方法:<br> 利用Timer1事件,如每0.005秒检查窗体的Left和Top属性是否与初始值相同,否<br>则使其复原。<br>3、可以考虑的另外一个思路:活动窗体的移动,应当引起被该窗体覆盖的窗体的<br>OnPaint事件,利用该事件将活动窗体的位置复原。<br>4、在窗体的OnPaint事件中加入:<br> Screen.ActiveForm.Left:=BeginLeft;//BeginLeft=窗体的Left初始值<br> Screen.ActiveForm.Top:=BeginTop; //BeginTop==窗体的Top初始值<br><br>上述方法我尝试了一下,第四个方法有一定的可行性。<br><br>试试,可以的话通知一声。<br>
1、一个窗口如果允许它改变大小,则可以变相地移动,即使做到了不能移动窗体,<br>如:把左边框向左拉50,再把右边框向左拉50,不是=向左移动50吗?所以:要不<br>能移动,最好同时不允许改变窗体尺寸。<br>2、一个不计较成本的方法:<br> 利用Timer1事件,如每0.005秒检查窗体的Left和Top属性是否与初始值相同,否<br>则使其复原。<br>3、可以考虑的另外一个思路:活动窗体的移动,应当引起被该窗体覆盖的窗体的<br>OnPaint事件,利用该事件将活动窗体的位置复原。<br>4、在窗体的OnPaint事件中加入:<br> Screen.ActiveForm.Left:=BeginLeft;//BeginLeft=窗体的Left初始值<br> Screen.ActiveForm.Top:=BeginTop; //BeginTop==窗体的Top初始值<br><br>上述方法我尝试了一下,第四个方法有一定的可行性。<br><br>试试,可以的话通知一声。<br>
P pingzi Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-26 #17 这么说吧,为什么程序运行后将他最大化,则不可移动,而在设计阶段<br>将form的windowState设为wsMaximized,或者在程序中指定Form的大小,<br>但是照样可以移动Form。<br>有没有比较好的方法在程序运行后将其最大化,但不显示最大化、最小化按钮,<br>这样就无法改变form的大小了。<br>
这么说吧,为什么程序运行后将他最大化,则不可移动,而在设计阶段<br>将form的windowState设为wsMaximized,或者在程序中指定Form的大小,<br>但是照样可以移动Form。<br>有没有比较好的方法在程序运行后将其最大化,但不显示最大化、最小化按钮,<br>这样就无法改变form的大小了。<br>
程 程云 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-26 #18 private<br>{ Private declarations }<br>Procedure MoveForm(var M:TWMNCHITTEST);<br>Message WM_NCHITTEST;<br> //声明一自定义事件,拦截“WM_NCHITTEST”消息<br> public<br> .<br> .<br>{$R *.DFM}<br><br>Procedure TForm1.MoveForm (var M:TWMNCHITTEST);<br>begin<br> inHerited;//继承,窗体可以继续处理以后的事件<br> if (M.Result=HTCLIENT) //如果发生在客户区<br>and ((GetKeyState(vk_CONTROL) < 0) <br> //检测“Ctrl”键是否按下<br> then M.Result:=HTCAPTION;<br> //更改“.Result”域的值<br>end;<br><br>这是让一个窗体点任何地方都右移动,<br>你可用他,让窗体不再移动。道理一样。<br><br>
private<br>{ Private declarations }<br>Procedure MoveForm(var M:TWMNCHITTEST);<br>Message WM_NCHITTEST;<br> //声明一自定义事件,拦截“WM_NCHITTEST”消息<br> public<br> .<br> .<br>{$R *.DFM}<br><br>Procedure TForm1.MoveForm (var M:TWMNCHITTEST);<br>begin<br> inHerited;//继承,窗体可以继续处理以后的事件<br> if (M.Result=HTCLIENT) //如果发生在客户区<br>and ((GetKeyState(vk_CONTROL) < 0) <br> //检测“Ctrl”键是否按下<br> then M.Result:=HTCAPTION;<br> //更改“.Result”域的值<br>end;<br><br>这是让一个窗体点任何地方都右移动,<br>你可用他,让窗体不再移动。道理一样。<br><br>
P pingzi Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-26 #19 我想,大家可能将这个问题想得过于复杂了,包括我自己;-),因为我刚刚<br>用一个极简单的办法解决了,就是设定form1.Align:=alClient,<br>form1.windowstate:=wsMaximized,这样即使最大、最小、关闭等按钮<br>都不可见,form也不可被移动。
我想,大家可能将这个问题想得过于复杂了,包括我自己;-),因为我刚刚<br>用一个极简单的办法解决了,就是设定form1.Align:=alClient,<br>form1.windowstate:=wsMaximized,这样即使最大、最小、关闭等按钮<br>都不可见,form也不可被移动。