请问下面这段代码是什么意思?
procedure TXXSpeedButton.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);....
if PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE) then
begin
if (Msg.Message = WM_LBUTTONDOWN) or (Msg.Message = WM_LBUTTONDBLCLK) then
begin
P := ScreenToClient(Msg.Pt);
if (P.X >= 0) and (P.X < ClientWidth) and (P.Y >= 0) and (P.Y <= ClientHeight) then
KillMessage(Windows.HWND_DESKTOP, Msg.Message);
end;
end;
.....
procedure TXXSpeedButton.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);....
if PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE) then
begin
if (Msg.Message = WM_LBUTTONDOWN) or (Msg.Message = WM_LBUTTONDBLCLK) then
begin
P := ScreenToClient(Msg.Pt);
if (P.X >= 0) and (P.X < ClientWidth) and (P.Y >= 0) and (P.Y <= ClientHeight) then
KillMessage(Windows.HWND_DESKTOP, Msg.Message);
end;
end;
.....
解决方案 »
- ExpressBars的dxSideBar怎么在上面加按钮?
- 内存泄漏之二,什么情况下会申请内存,
- delphi 终止sql查询
- 情人节,为我重为光棍散分!
- 放分给帮助过我的朋友,jinjazz(我是jin)、爱理不理 一定要来啊!
- 我中了1百万,狂喜中!!!!!!!!!!!!!!
- 谁能帮我解释这里的integer的意思及作用?
- 我的程序写成的.CPL放到系统目录下被控制面板加载后还想再编译,可是编译不了,怎么办呀
- 现在还在加班,散分!
- 用SQL语句中的ORDER BY如何排序两个字段的联合结果?
- 我们的程序是C/S结构的,现在每次升级软件都非常麻烦,要每台机器去覆盖,请问有没有什么好的解决方案?
- 如何删除一个文件里面的资源,比如a.exe文件的RT_RCDATA类型下有一个名为LOVE的资源,如何删除并可以减少原文件大小?
procedure KillMessage(Wnd: THandle; Msg: Cardinal);
var
M: TMsg;
begin
M.Message := 0;
if PeekMessage(M, Wnd, Msg, Msg, PM_REMOVE) and (M.Message = WM_QUIT) then
PostQuitMessage(M.WParam);
end;
procedure TXXSpeedButton.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); ....
while PeekMessage(Msg, HWND_DESKTOP, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do
{nothing};
if GetCapture <> 0 then
SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
.....
begin
if (Msg.Message = WM_LBUTTONDOWN) or (Msg.Message = WM_LBUTTONDBLCLK) then // 判断是左键按下 或者 左键双击
begin
P := ScreenToClient(Msg.Pt); //
if (P.X >= 0) and (P.X < ClientWidth) and (P.Y >= 0) and (P.Y <= ClientHeight) then 在//ClientRect 范围内
KillMessage(Windows.HWND_DESKTOP, Msg.Message);
end;
end; procedure KillMessage(Wnd: THandle; Msg: Cardinal);
var
M: TMsg;
begin
M.Message := 0;
if PeekMessage(M, Wnd, Msg, Msg, PM_REMOVE) // 取出 WM_LBUTTONDOWN 或 WM_LBUTTONDBLCLK 消息
and (M.Message = WM_QUIT) then // M.Message = WM_QUIT 一定为 false
PostQuitMessage(M.WParam); // 根本不执行
end;
综上所述,KillMessage 啥也没干。
procedure TXXSpeedButton.MouseDown(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); ....
while PeekMessage(Msg, HWND_DESKTOP, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do // 清除消息队列中 WM_MOUSEFIRST 到 WM_MOUSELAST 之间的消息, 也就是鼠标消息
{nothing};
if GetCapture < > 0 then
SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
.....