1.可以使用Api函数,但时间太久,实在记不清楚了,你自己查一下吧
2.这个问题没有处理过
3.可以在MouseMove消息相应函数中判断,使用SetCapture()(捕捉鼠标函数),然后判断鼠标位置是否在"按钮"上即可
2.这个问题没有处理过
3.可以在MouseMove消息相应函数中判断,使用SetCapture()(捕捉鼠标函数),然后判断鼠标位置是否在"按钮"上即可
解决方案 »
- 求D2007 for .net的DB的source
- select * from 结果到excel表中,但是select 列却不行
- 画这样的形状?
- case Integer of是什么意思?Integer不是整型吗?怎么可以拿来case?谢
- record记录赋值问题
- 日期
- 在学习devexpress系列后,总结的3大问题,希望大家能解决!
- 怎样让TEdit中的文字中间对齐或右对齐?
- ¥¥¥¥¥因项目需要,急高薪(1000~5000)诚招DELPHI程序员和掌握DELPHI的项目开发经理,有意请联系[email protected]
- 各位英雄啊!救命啊……!怎样安全的配置数据库别名……?
- listView 与treeview搭配使用的问题
- 怎样检查本机端口情况?
int WINAPI WlxLoggedOnSAS (
PVOID pWlxContext,
DWORD dwSasType,
PVOID pReserved)
{
HANDLE hMutex;
WriteInfo("WlxLoggedOnSAS \r\n"); //用于记录信息
if (dwSasType == WLX_SAS_TYPE_CTRL_ALT_DEL){ //屏蔽CTRL_ALT_DEL,也可以根据特定条件来决定是否要屏蔽
//我采用了Mutex来控制是否屏蔽,(注意:要用unicode)
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"_ac952_z_cn_CTRL_ALT_DEL");
if (hMutex){
CloseHandle(hMutex);
WriteInfo("disble CTRL+ALT+DEL \r\n");
return WLX_SAS_ACTION_NONE; //将屏幕切换到应用程序桌面,屏蔽掉CTRL+ALT+DEL
}
else
WriteInfo("not disble CTRL+ALT+DEL \r\n");
}
return prcWlxLoggedOnSAS ( //这是我从MSGINA.DLL中获取的函数。
pWlxContext,
dwSasType,
pReserved);
}
我们要在自己的程序中调用hMutex = CreateMutex(NULL, FALSE, "_ac952_z_cn_CTRL_ALT_DEL");就可屏蔽CTRL+ALT+DEL。
function GetParentWindowNameAt ( X, Y : integer ) : string;
var P : TPoint; W : TWinControl;
begin
P.X := X;
P.Y := Y;
W := FindVCLWindow( P );
if( nil <> W ) then
Result := W.Name;
Result := '';
end;
CM_MOUSEENTER
CM_MOUSELEAVE
必须自己继承控件,因为这不是Windows的标准消息。
在Form中声明两个函数:
procedure CMMouseEnter(var msg:tmessage);message CM_MOUSEENTER;
procedure CMMouseLeave(var msg:tmessage);message CM_MOUSELEAVE;
实现部分如下:
procedure Form.CMMouseEnter(var msg:tmessage);
var
obj:TObject;
begin
obj:=Tobject(msg.lParam);//鼠标所在的控件
if obj<>nil then
begin
//确定控件的类型
//你的处理
end;
end;procedure Form.CMMouseLeave(var msg:tmessage);
var
obj:TObject;
begin
obj:=Tobject(msg.lParam);//鼠标所在的控件
if obj<>nil then
begin
//确定控件的类型
//你的处理
end;
end;
限制鼠标的活动范围:
在Form中放置二个 Button, 然後分别为这两个按钮定义OnClick响应事件如下:
procedure TForm1.Button1Click(Sender: TObject);
var
btButton2: TRect;
begin
btButton2 := Button2.BoundsRect;
MapWindowPoints(handle, 0, btButton2, 2); // 座标换算
ClipCursor(@btButton2); // 限制鼠标移动区域
end;
procedure TForm1.Button2Click(Sender: TObject);
var
btScreen: TRect;
begin
btScreen := Rect(0, 0, Screen.Width, Screen.Height);
ClipCursor(@btScreen);
end;
不过,你锁鼠标时如果不锁定系统功能键,则可能发生鼠标从该区域离开的现象(具体原因不知,也请高人指点).
//进入屏保状态
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1,nil, 0);
//解除屏保状态
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, nil, 0);
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1,nil, 0);
//解除屏保状态
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, nil, 0);
锁鼠标就是建立一个TRect区域(例rtscreen),然后用MapWindowPoints(0,0,rtscreen, 2); 进行座标换算,再ClipCursor(@rtscreen);
FindVCLWindow( P );