你的TImage最好包含是Icon,假设你的表单为TDBGrid DBGrid1:
1、用鼠标单击某个TImage时,鼠标的光标立刻由该图象替代,可以在表单上到处移动。
在Image的OnClick事件中加入:
...
//此处的1为一代表值,只要大于0即可,以免替换掉系统缺省的光标
Screen.Cursors[1] := (Sender as TImage).Picture.Icon.Handle;
DBGrid1.Cursor := 1;
...2、It's OK,试试看?

解决方案 »

  1.   

    对不起,这几天上网线路不畅,让各位久等了.我比较同意Lin的看法,我后来查看了帮助文件,发现TImage对象中有TIcon,且TIcon对象也包含TBitmap对象,是否可以用Assign()方法把32X32的位图直接copy到TIcon对象中,不知TIcon是否允许256色,Borland提供的图标制作工具好象只允许16色.请问我的想法是否可行?
      

  2.   

    symansoft:
    按照我的理解,Cursor也是一个Icon,所以凡是用到彩色Cursor的地方,都可以用Icon取代,不过,热点位置只能是(0,0),这可能是Icon和Cursor的区别所在。
    TIcon允许256色甚至是TrueColor,不过不能使用Borland提供的ImagEdit,得使用其他的工具(如果需要,我可以提供,它还可以编辑ANI文件哦)。在载入的时候,使用LoadImage而不要使用LoadIcon按照我的理解,LoadBitmap、LoadIcon、LoadCursor都将被LoadImage取代。
    TIcon应该包含两个TBitmap,一个与,一个或,所以不能将一个TBitmap直接Assign给一个TIcon对象。
      

  3.   


    Lin君回答的非常好,使人茅塞顿开,不过我还得咀嚼一下。如果你提到的那个能取代Borland的ImageEdit的工具不大的话,能否直接寄给我,或告诉我其下载地址?
      

  4.   


    首先,感谢Lin提供了一个好软件!
    关于本期问题的来由,我想做如下详细说明:
        我空闲时间想设计一个象棋软件,其中32个棋子用32个TImage对象,每个棋子的Picture属性是32X32的256色BMP文件,同兵种第二个棋子的Picture从第一个中复制(比如第一只车是ChessmanRC1)如:
       ChessmanRC2->Picture->Assign(ChessmanRC1->Picture);
        奇怪的是,程序运行时,用鼠标拖动ChessmanRC1到ChessmanRC2上时,并不覆盖ChessmanRC2,反而钻到ChessmanRC2下面去了。没办法,只好寄希望于把棋子的Picture取代鼠标的光标,可以拖到任何地方。
        我参看了Borland提供的例子游戏Swat,其中自定义光标部分如下:
        Screen->Cursors[crMaletUp] = LoadCursor(HInstance, "Malet");
        Screen->Cursors[crMaletDown] = LoadCursor(HInstance, "MaletDown");
        上面crMaletU为5,crMaletDown为6,我不明白自定义光标序号一定要从5开始,麻烦Lin总结以下好吗?
      

  5.   

    symansoft:
    自定义光标序号也不一定非要从5开始,如果你看看系统光标的预定义值,它们是从-22到0,所以,自定义光标只要大于0就可以了。
      

  6.   

    关于“程序运行时,用鼠标拖动ChessmanRC1到ChessmanRC2上时,并不覆盖ChessmanRC2,反而钻到ChessmanRC2下面去了”,是不是可以这样解决(我没有BCB++,没法子试):ChessmanRC1->BringToFront();
      

  7.   


    Lin,我今天试用了一下你所建议的超级图标工具,功能确实强大,但有个问题,比如用它制作的光标资源*.Cur在用Borland提供的Brc32编译成*.res时却遇到“Invalid cursor format”的错误(请参看....\examples\game\swat\readme.txt),请问你如何使用的?
      

  8.   

    1、手工编辑一个RC文件,例如Test.RC,包含以下内容:
    ...
    1000 CURSOR "Test.cur"
    ...
    2、将Test.rc加入到工程;
    3、在使用时用LoadImage API,不要用LoadCursor:
      Screen.Cursors[1] := LoadImage(hInstance, MakeIntResource(1000), IMAGE_CURSOR, 32, 32, LR_DEFAULTCOLOR);
      Button5.Cursor := 1;
    4、祝你成功。
      

  9.   


    再次感谢Lin的不厌其烦的答复。现在问题的焦点转变为怎样把超级图标软件制作出的256色或真彩色图标的光标资源*.cur编译成*.res文件,看样子本期问题基本上解决了。
      

  10.   


        256色自定义光标我已经实现,但有一点不满意,就是自画光标图案(比如一只彩球)四周的背景色是白色,而不是Form的颜色,请问如何解决这个问题呢?谢谢!