可以用消息处理,在想改变鼠标形状是地方向系统发自定义消息,在此消息的处理过程中家上你的代码即可。参考下面的代码:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
const
  SX_MYMESSAGE = WM_USER + 100;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure SXMyMessage(var Msg: TMessage);message SX_MYMESSAGE;
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);begin
  SendMessage(Handle,SX_MYMESSAGE,0,0);
end;procedure TForm1.SXMyMessage(var Msg: TMessage);
begin
  Cursor := -11;
end;end.
用Enter键激活Button1

解决方案 »

  1.   

    TControl有一个属性,为Cursor,把它设置一个形状后,每当鼠标在它上边时,光标会变为那个形状.我的问题是,当鼠标在它上边时,我改变了Cursor,但光标的形状不能立即改变,需要用手动一下鼠标,才能更新光标形状.这个问题怎么办?谢谢csdn72的回复,但不是我的问题.
      

  2.   

    用指令控制鼠标move一个坐标了。
      

  3.   

    可以在控件的如OnMouseMov,OnKeyDown,OnEnter等事件中发送消息:
       SendMessage(Handle,SX_MYMESSAGE,0,0);
    这样就可以不用移动鼠标就触发改变形状的事件
      

  4.   

    JohnWoo(JohnWoo)的思路正确.我一开始也是这么想,但我想用WM_MOUSEMOVE消息控制鼠标位置,不知道消息参数的格式.后来想到使用GetCursor和PosSetCursorPos,就解决了.var
      p:TPoint;
    begin
    MyControl.Cursor:=MyCursor;
    GetCursorPos(p);
    SetCursorPos(p.X,p.Y);