clkPan[I]是自定义的23个panel控件,想实现的功能:当鼠标进入任意一个clkPan控件时光标变成小手形状,退出该panel时恢复默认形状。下面是我的代码,不知道错在哪?高手帮忙看看,谢谢。
procedure TParaAddForm.CMMouseEnter(var Msg: TMessage);
var
  I:Integer;
begin
  //**************获取鼠标刚进入的控件类型************//
  sObject:=TObject(Msg.LParam);
  if sObject is TPanel then
    if sObject <> nil then
      for I:=1 to 23 do
        if sObject=clkPan[I] then
        begin
          clkPan[I].Cursor:=crHandPoint;
        end;
end;procedure TParaAddForm.CMMouseLeave(var Msg: TMessage);
var
  I: Integer;
begin
  //********获取鼠标刚离开的控件类型*********//
  sObject:=TObject(Msg.LParam);
  if sObject is TPanel then
    if sObject <> nil then
      for I:=1 to 23 do
        if sObject=clkPan[I] then
        begin
          clkPan[I].Cursor:=crDefault;
        end;
end;

解决方案 »

  1.   

    运行的时候到if sObject <> nil then语句还是正常的,但是下面的循环语句中没有一个clkPan[I]符合sObject=clkPan[I]这个条件,可是我的鼠标已经位于一个clkPan上面了啊!
      

  2.   

    关注类似请教:
    http://expert.csdn.net/Expert/topic/2601/2601363.xml?temp=.9008905
      

  3.   

    谢谢hthunter(核桃),是把clkPan[I].Cursor改成Screen.Cursor吗?好像不行啊
      

  4.   

    procedure TForm1._PanelMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
       TPanel(sender).Cursor:= crHandPoint;
    end;再将所有clkPan[I] 中的OnMouseMove:=  _PanelMouseMove;
      

  5.   

    //自定义事件过程
    procedure TForm1._PanelMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
       TPanel(sender).Cursor:= crHandPoint;
    end;再将所有clkPan[I] 中的OnMouseMove:=  _PanelMouseMove;
    应该是可以的
      

  6.   

    谢谢追日,原先我也想用mousemove,当时考虑鼠标离开时形状改不回来,没用这个。看来还是这个简单多了,不过我还是没搞明白我那个错在哪里?为什么sObject=clkPan[I] 这句语句总是不成立。如果哪位高手指点一下的话我再给分。先谢了!
      

  7.   

    谢谢追日,原先我也想用mousemove,当时考虑鼠标离开时形状改不回来,没用这个。看来还是这个简单多了,不过我还是没搞明白我那个错在哪里?为什么sObject=clkPan[I] 这句语句总是不成立。如果哪位高手指点一下的话我再给分。先谢了!
      

  8.   

    谢谢追日,原先我也想用mousemove,当时考虑鼠标离开时形状改不回来,没用这个。看来还是这个简单多了,不过我还是没搞明白我那个错在哪里?为什么sObject=clkPan[I] 这句语句总是不成立。如果哪位高手指点一下的话我再给分。先谢了!