在 Visual Basic 中如何拖动窗体或控件?
1个回答
2014-01-09
展开全部
现在的许多 windows 下的应用程序,都采用了图形化的界面,但是在这样的界面下就不能使用 Windows 原来的标题条了,否则会影响界面的美观。那么在没有标题条的情况下如何用鼠标拖动窗体或者其它的控件呢?
其实,采用 API 函数调用很容易实现,下面我们以拖动窗体 Form1 为例来具体讲一下实现方法:
1、新建立一个项目,名称为 test.vbp;
2、填加一个模块,名称为 test.bas,并且在声明部分加入以下代码:
Declare Function ReleaseCapture Lib "user32" () As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF012
其中 ReleaseCapture 函数是用来释放鼠标捕获的,SendMessage 函数是一个在 Windows API 中非常重要的函数,在这里的作用是用来向 Windows 发送移动窗体的消息。WM_SYSCOMMAND 是向 Windows 发送消息的常量。SC_MOVE 是控制移动窗体的常量。请注意:这里 SC_MOVE 的赋值是 &HF012,表示鼠标对象。
3、在窗体的 MouseDown 过程中加入以下代码:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
End Sub
其中 ReleaseCapture 函数用来释放鼠标捕获,SendMessage 函数向 Windows 发送移动窗体的消息。
4、保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。
以上讲述了如何在 VB 中用鼠标拖动窗体,其实,控件的拖动的原理是一样的。例如以下代码可以实现图片框的拖动:
ReleaseCapture
SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
(注:以上程序在 Windows98、VB5.0/6.0 下调试通过。在 NT4.0、VB6.0 下不能运行。)
103,Q:用 Delphi5.0 编程实现 Windows 桌面的隐藏和显示
A:实现原理是调用 Windows 的 API 函数。程序代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var hDesktop:Thandle;
begin
hDesktop:=FindWindow(''Progman'',nil);
ShowWindow(hDesktop,SW_HIDE); //隐藏桌面
end;
procedure TForm1.Button2Click(Sender: TObject);
var hDesktop:Thandle;
begin
hDesktop:=FindWindow(''Progman'',nil);
ShowWindow(hDesktop,SW_SHOW); //显示桌面
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end
其实,采用 API 函数调用很容易实现,下面我们以拖动窗体 Form1 为例来具体讲一下实现方法:
1、新建立一个项目,名称为 test.vbp;
2、填加一个模块,名称为 test.bas,并且在声明部分加入以下代码:
Declare Function ReleaseCapture Lib "user32" () As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF012
其中 ReleaseCapture 函数是用来释放鼠标捕获的,SendMessage 函数是一个在 Windows API 中非常重要的函数,在这里的作用是用来向 Windows 发送移动窗体的消息。WM_SYSCOMMAND 是向 Windows 发送消息的常量。SC_MOVE 是控制移动窗体的常量。请注意:这里 SC_MOVE 的赋值是 &HF012,表示鼠标对象。
3、在窗体的 MouseDown 过程中加入以下代码:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
End Sub
其中 ReleaseCapture 函数用来释放鼠标捕获,SendMessage 函数向 Windows 发送移动窗体的消息。
4、保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。
以上讲述了如何在 VB 中用鼠标拖动窗体,其实,控件的拖动的原理是一样的。例如以下代码可以实现图片框的拖动:
ReleaseCapture
SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
(注:以上程序在 Windows98、VB5.0/6.0 下调试通过。在 NT4.0、VB6.0 下不能运行。)
103,Q:用 Delphi5.0 编程实现 Windows 桌面的隐藏和显示
A:实现原理是调用 Windows 的 API 函数。程序代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var hDesktop:Thandle;
begin
hDesktop:=FindWindow(''Progman'',nil);
ShowWindow(hDesktop,SW_HIDE); //隐藏桌面
end;
procedure TForm1.Button2Click(Sender: TObject);
var hDesktop:Thandle;
begin
hDesktop:=FindWindow(''Progman'',nil);
ShowWindow(hDesktop,SW_SHOW); //显示桌面
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询