关于光标形状

SVIP_ 2011-05-10 03:53:38
演示代码如下, 环境D7

procedure TForm1.FormCreate(Sender: TObject);
begin
screen.Cursors[1]:=loadcursorfromfile('50.cur');
bIn := False;
end;

procedure TForm1.pnl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
icon: Cardinal;
begin
bIn := True;
pnl1.Cursor := 1;
end;

procedure TForm1.pnl1Exit(Sender: TObject);
begin
bIn := False;
pnl1.Cursor := 0;
end;

procedure TForm1.pnl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bIn := False;
pnl1.Cursor := 0;
end;


想实现的效果是当在pnl1上按下左键时, 将光标形状自定义, 弹起或离开pnl1区域时恢复.
现在的问题是: 左键按下时光标形状未改变, 右键按下时正常.
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SVIP_ 2011-05-11
  • 打赏
  • 举报
回复
两位说的都有道理, m617105的回答可以将我问题解决.

还有就是TPanel的Onexit事件貌似不能触发, 可通过如下代码简单处理:

procedure TForm1.pnl1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Rc: TRect;
begin
Rc := pnl1.ClientRect;
InflateRect(Rc, -2, -2);
if not PtInRect(Rc, Point(x,y)) then
begin
if bIn then
begin
bIn := False;
Screen.Cursor := 0;
end;
end;
end;


多谢大家, 结贴.
ggggcexx 2011-05-10
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
begin
screen.Cursors[1]:=loadcursorfromfile('50.cur');
bIn := False;
end;

procedure TForm1.pnl1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
icon: Cardinal;
begin
bIn := True;
Cursor := 1;
end;

procedure TForm1.pnl1Exit(Sender: TObject);
begin
bIn := False;
pnl1.Cursor := crDefault;
end;

procedure TForm1.pnl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
bIn := False;
Cursor := crDefault;
end;


Panel的Cursor可能与Screen.Cursor相等,所以你直接将桌面的光标改成自定义的就行了,
鼠标离开的时候再恢复就可以了
浩南_哥 2011-05-10
  • 打赏
  • 举报
回复
代码试了下
把弹起的代码注释掉,按下之后弹起的时候才更换光标。。。。。。
要不用screen.Cursor := 1;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧