关于改变鼠标指针形状的问题(100分)

  • 主题发起人 liyinwei
  • 开始时间
L

liyinwei

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用鼠标拖动窗体来移动窗体
而且要鼠标左键按下和弹起的时候改变鼠标指针的形状
但是 Screen.Cursor := crDefault;
总是不执行
查以前的帖子说是 ReleaseCapture 造成的,但是没有找到解决办法
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if Button <> mbLeft then
Exit;
Screen.Cursor := crSizeAll;
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;

procedure TForm1.FormMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
//就是下面这一句不执行
Screen.Cursor := crDefault;
end;

麻烦兄弟们帮小弟想想办法解决。
 
新年同乐
 
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if Button <> mbLeft then
Exit;
Screen.Cursor := crSizeAll;
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
// 在这个事件就行了。
begin
Screen.Cursor := crDefault;
end;
 
我是要在鼠标左键弹起的时候自动恢复为默认的鼠标指针形状。
 
倒.......这个.......其实很简单
ReleaseCapture;撤消了鼠标按下的消息,抬起时自然就不会触发mouseup的事件了
Perform(WM_SYSCOMMAND, $F012, 0);这个接管了鼠标的输入变成窗口拖拽,在拖拽结束后Perform才结束继续后面的操作........
所以......你只需要把Screen.Cursor := crDefault;写到Perform后面就行了.....mouseup事件任何代码都不需要写
如下:
procedure TForm1.FormMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if Button <> mbLeft then
Exit;
Screen.Cursor := crSizeAll;
ReleaseCapture;
Perform(WM_SYSCOMMAND,$F012, 0);
Screen.Cursor := crDefault;
end;
 
呵呵!
问题解决了,散分。
 

Similar threads

顶部