delphi 自定义光标

发布时间 2023-10-10 19:04:37作者: txgh

自定义光标

代码

使用图像的方式

你可以使用两个位图(一个用于普通图像,一个用于遮罩图像)来创建图标,并将其手动加载到 Cursors 属性

使用完自定义光标后要调用Windows API函数DestroyIcon

const
  crMyCursor = 5;

procedure TForm1.Button1Click(Sender: TObject);
var
  bmpMask : TBitmap;
  bmpColor : TBitmap;
  iconInfo : TIconInfo;
begin
  //加载光标图片
  bmpMask := TBitmap.Create;
  bmpColor := TBitmap.Create;
  bmpMask.LoadFromFile('C:\Users\Administrator\Desktop\1.bmp');
  bmpColor.LoadFromFile('C:\Users\Administrator\Desktop\2.bmp');

  //Windows API创建光标
  with iconInfo do
  begin
    fIcon := false;
    xHotspot := 15;
    yHotspot := 15;
    hbmMask := bmpMask.Handle;
    hbmColor := bmpColor.Handle;
  end;

  //添加到Screen中
  Screen.Cursors[crMyCursor] := CreateIconIndirect(iconInfo);

  //设置光标
  Screen.Cursor := crMyCursor;

  bmpMask.Free;
  bmpColor.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //设置为默认
  Screen.Cursor := crDefault;
  //释放光标
  DestroyIcon(Screen.Cursors[crMyCursor]);
end;

使用光标资源的方式

  1. 使用资源编辑器创建光标资源。
  2. 声明一个光标常量,其值不能与现有光标常量冲突。
  3. 使用Windows API 函数LoadCursorLoadImage 获取新光标的句柄。
  4. 将由新声明的光标常量索引的 Cursors 属性设置为从 LoadCursor 获取的句柄。

使用完自定义光标后不要调用Windows API函数DestroyCursor,它是自动处理的。

const
  crMyCursor = 5;

procedure TForm1.Button3Click(Sender: TObject);
var
  icon: HICON;
begin
  //从文件中加载
  icon := LoadCursorFromFile('C:\Windows\Cursors\aero_pin.cur');
  //添加到Screen中
  Screen.Cursors[crMyCursor] := icon;
  //设置光标
  Screen.Cursor := crMyCursor;
end;

Vcl.Forms.TScreen.Cursors

property Cursors[Index: Integer]: HCURSOR read GetCursors write SetCursors;

列出应用程序可用的光标。

使用 Cursor 访问特定的光标,供应用程序或应用程序中的控件使用。 TScreen 包括几个内置光标,它们由符号光标常量(例如 crDefault)索引。与内置光标常量关联的图像可以通过设置 Cursors 属性来更改。

CreateIconIndirect

function CreateIconIndirect;

unit

Winapi.Windows

ICONINFO 结构创建图标或光标。

DestroyIcon

function DestroyIcon;

unit

Winapi.Windows

销毁图标并释放图标占用的任何内存。

LoadCursorFromFile

function LoadCursorFromFile: HCURSOR;

unit

Winapi.Windows

基于文件中包含的数据创建游标。

参考

CreateIconIndirect 函数

DestroyIcon 函数

LoadCursorFromFileW 函数