演示代码如下, 环境D7procedure 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区域时恢复.
现在的问题是: 左键按下时光标形状未改变, 右键按下时正常.
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区域时恢复.
现在的问题是: 左键按下时光标形状未改变, 右键按下时正常.
把弹起的代码注释掉,按下之后弹起的时候才更换光标
要不用screen.Cursor := 1;
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相等,所以你直接将桌面的光标改成自定义的就行了,
鼠标离开的时候再恢复就可以了
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;
多谢大家, 结贴.