在Delphi中用Loadcursor()得到的光标只有黑白两色,怎样在程序中得到彩色光标呢?
方法一 用Loadcursorfromfile()从外部调入图标作为光标 Loadcursorfromfile()函数可以读*.CUR,*.ICO,*.ANI为后缀的文件作为光标,其中ICO为彩色图标格式(可用Image Editor制作),ANI为动画光标格式。以下为打开一图标作为光标的演示程序段,当光标移动到测试区域内光标会变成选定的图案; {设:opendialog1:Topendialog;Bitbtn1:Tbitbtn} procedure TForm1.BitBtn1Click(Sender:TObject); var tt:pchar;size:integer;s:string; begin if opendialog1.Execute then begin size:=length(opendialog1.filename); getmem(tt,size); s:=opendialog1.filename; strpcopy(tt,s); screen.cursors[2]:=loadcursorfromfile(tt); bf.cursor:=2; freemem(tt,size); end; end; 方法二 从资源文件加载彩色光标 用方法一发送程序时必须包含*.CUR文件,因而从资源文件中加载彩色光标是更可行的方法。用图标存放彩色光标,使用时把图标存入临时文件,用Loadcursorfromfile()从临时文件读出彩色光标。 程序段: procedure ZloadfromResourse(screenindex:integer;name:Pchar); var td:ticon; begin try td:=ticon.Create; td.Handle:=LoadIcon(Hinstance,name); td.SaveToFile(′temp.cur′); screen.Cursors[screenindex]:=loadcursorfromfile(′temp.cur′); deletefile(′temp.cur′); finally td.free; end; end; 此程序把名字为name的图标变为序号为screenindex的光标; 例: ZloadfromResourse(2,′myicon′); Form1.cursor:=2; 注意:′myicon′这个图标一定要在资源文件中,否则会出现异常。 

解决方案 »

  1.   

    说实话我真不知道lucky的哪个帖子是自己的开发经验还是别处抄来的,哪个方法1本身就有错误,你自己看看再说吧!
      

  2.   

    Tools - Debug Options - Stop On delphi ...不选。
      

  3.   

    是不是要从新再启动DELPHI?我用的是D5啊!我试试看
      

  4.   

    还有,那里面的另外几个也需要取消吗?还是只在stop on delphi中取消?刚才我取消它了,但是还是提示有内存的错误出现。
      

  5.   

    Tools  -  Debug  Options 
     -  Stop  On  delphi
      

  6.   

    我已经试过了,不行!除非把INTEGRATED debugging 关了才可以,但是不能设置断点调试程序了! 只关闭STOP ON DELPHI 不行的, 还是会提示内存有错误。对于程序方面我查过了:screen.Cursors[1]对应的是长字性Dword,但是我现在根本不能针对loadcursorfromfilea();查看该函数的返回直是多少,而且被封庄在了USER32。DLL的文件里!如果大家有时间帮我看看,我真的一点办法也没有,现在根本不能对程序进行正常的算法调试!请各位高手帮忙!!!!原代码如下:
    unit   Unit1;interfaceuses
      SysUtils, WinTypes, WinProcs, Messages, Classes,
      Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type  TForm1 = class(TForm)
        Image1: TImage;
        Image2: TImage;
        Image3: TImage;
        procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image3Click(Sender: TObject);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
       
      private
        i:integer;
        td:ticon;
        { Private declarations }
      public
        { Public declarations }
    end;var
    Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      image2.Canvas.Draw(0,0,image1.picture.icon);
    end;procedure TForm1.Image3Click(Sender: TObject);
    begin
      screen.Cursors[2]:=loadcursorfromfile('100.ico');
      image3.Cursor:=2;
      image2.Cursor:=2;
      cursor:=2;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      tt:pchar;
      size:integer;
      s:string;
    begin
     // size:=15;
     // getmem(tt,size);
     // s:='g:\drog\100.ico';
     // strpcopy(tt,s);
      screen.Cursors[1]:=loadcursorfromfilea(pchar('100.ico'));
      image1.Cursor:=1;
      image2.Cursor:=1;
      cursor:=1;
    //  freemem(tt,size);end;end.