Firemonkey扩展增强:自定义Cursor

在VCL中很容易通过Screen.Cursors加载自定义cursor,但在FMX中,cursor是通过IFMXCursorService管理的,只支持系统默认的cursor。如果要加载自定义的cursor,我们需要替换平台默认实现的IFMXCursorService。

Windows平台源码如下:

unit uWinCursorService;

interface

uses FMX.Platform, System.UITypes, FMX.Types, Winapi.Windows, System.Generics.Collections;

type
  TWinCursorService = class(TInterfacedObject, IFMXCursorService)
  private class var
    FWinCursorService: TWinCursorService;
    FOldCursorService: IFMXCursorService;
    FCursors: TList<HCURSOR>;
  protected
    class constructor Create;
    class destructor Destroy;
    procedure SetCursor(const ACursor: TCursor);
    function GetCursor: TCursor;
  public
    class function AddCursor(const AFileName: string): Integer;
  end;

implementation

uses System.SysUtils;
{ TWinCursorService }

class constructor TWinCursorService.Create;
begin
  FOldCursorService := TPlatformServices.Current.GetPlatformService(IFMXCursorService)
    as IFMXCursorService;
  TPlatformServices.Current.RemovePlatformService(IFMXCursorService);
  FWinCursorService := TWinCursorService.Create;
  TPlatformServices.Current.AddPlatformService(IFMXCursorService, FWinCursorService);
  FCursors := TList<HCURSOR>.Create;
end;

class destructor TWinCursorService.Destroy;
begin
  FOldCursorService := nil;
  //DestoryCursor
  FCursors.Free;
end;

class function TWinCursorService.AddCursor(const AFileName: string): Integer;
var
  hCur: HCURSOR;
begin
  Result := 0;
  hCur := LoadCursorFromFile(PCHAR(AFileName));
  if hCur>0 then
    Result := FCursors.Add(hCur) + 1;
end;

function TWinCursorService.GetCursor: TCursor;
begin
  Result := FOldCursorService.GetCursor;
end;

procedure TWinCursorService.SetCursor(const ACursor: TCursor);
var
  NewCursor: HCURSOR;
begin
  if ACursor<=crDefault then
    FOldCursorService.SetCursor(ACursor)
  else begin
    if ACursor>FCursors.Count then
      FOldCursorService.SetCursor(crDefault)
    else Winapi.Windows.SetCursor(FCursors[ACursor-1]);
  end;
end;

end.


使用上只需一句即可:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Cursor := TWinCursorService.AddCursor('.\bin\Res\2.cur');
end;

TWinCursorService.AddCursor方法加载指定光标资源,返回光标索引,程序中只要保存这个索引,之后窗体或控件需要显示该光标直接设置其cursor为这个索引就可以了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi GUI编程与FireMonkey:释放FM的全部潜能 Delphi是一种强大的编程语言和集成开发环境,而FireMonkey是其GUI框架的一部分。FireMonkey是一种跨平台的GUI框架,它允许开发人员创建适用于各种操作系统的用户界面。 使用FireMonkey,我们可以充分发挥FM的全部潜能。首先,FM支持多平台开发,这意味着我们只需编写一次代码,即可将我们的应用程序运行在多个操作系统上,如Windows、macOS、iOS和Android。这对于开发人员来说是非常方便和高效的,因为他们不需要为每个平台单独编写代码。 其次,FM提供了丰富的GUI控件和功能,用于创建各种用户界面。它包括按钮、文本框、列表框、滑块等常见的控件,以及图表、动画、3D渲染等增强功能。这些控件和功能可以让我们的应用程序具有更多的交互性和吸引力,满足用户对美观和易用性的需求。 此外,FM还提供了强大的绘图和渲染功能,可以实现高效的图形处理和动画效果。它支持矢量图形、位图和OpenGL渲染,使我们能够创建出色的视觉效果,并实现流畅的界面操作。 最后,FM还具有强大的数据绑定和响应式编程功能。我们可以将应用程序的数据模型与界面元素进行绑定,实现数据的自动更新和同步。这使得我们的应用程序能够快速响应用户的操作,并提供实时数据展示和交互。 总而言之,Delphi GUI编程与FireMonkey可以让开发人员充分发挥FM的全部潜能。它的跨平台能力、丰富的控件和功能、强大的绘图和渲染、以及数据绑定和响应式编程能力,使我们能够创建出色的GUI应用程序,满足用户的需求和期望。无论是桌面应用程序还是移动应用程序,DelphiFireMonkey都是一个强大的选择。 ### 回答2: FireMonkeyDelphi的GUI开发框架,它能释放出FM(FireMonkey)的全部潜能,让开发者可以创建出更加丰富、灵活和吸引人的应用程序。 使用FireMonkey进行GUI编程,可以实现跨平台开发。FireMonkey支持Windows、macOS、iOS和Android等多个平台,开发者只需要编写一次代码,就可以在不同平台上运行应用程序。这大大节约了开发时间和工作量。无论你是为桌面还是移动设备开发应用程序,FireMonkey都能帮助你快速有效地完成任务。 FireMonkey提供了丰富的GUI组件库,可以创建各种界面元素,如按钮、文本框、列表框等。这些组件可以自定义样式和外观,使应用程序具有独特的风格和品味。FireMonkey还支持多点触摸和手势操作,可以让用户在触摸设备上更自由地进行交互。 另外,FireMonkey还提供了强大的绘图和动画功能。开发者可以利用FireMonkey的绘图引擎创建出精美的图形和动画效果。这些效果可以增强用户体验,使应用程序更加生动和具有吸引力。 FireMonkey还支持数据绑定和数据库连接,可以轻松地与数据库进行交互。开发者可以利用FireMonkey的数据绑定功能将界面元素与数据源进行绑定,实现数据的显示和更新。这使得开发和管理数据库应用程序变得更加简单和高效。 总之,Delphi GUI编程与FireMonkey的结合能够充分发挥FireMonkey的潜能,让开发者可以快速构建跨平台、丰富多样的应用程序,提高开发效率并提升用户体验。 ### 回答3: Delphi是一种用于创建GUI应用程序的编程语言,它采用了FireMonkey框架来实现跨平台的用户界面设计。FireMonkey是Embarcadero Technologies开发的一种强大的GUI框架,可以让开发人员充分发挥FM的潜力。 FireMonkey不仅可以在不同操作系统上运行,还具有丰富的界面控件和可定制性。使用FireMonkey,开发人员可以快速创建漂亮、直观的用户界面,无论是在桌面还是移动设备上。FireMonkey还支持多种触摸手势和动画效果,使应用程序在用户界面上更具交互性和吸引力。 FireMonkey还提供了强大的图形处理功能,包括2D和3D绘图、图像处理和多媒体支持。它还集成了先进的图形渲染引擎,可以实现高性能的图形效果。通过FireMonkey,开发人员可以创建出色的图表、数据可视化和游戏应用程序。 另外,FireMonkey还具有可扩展性和可定制性。开发人员可以通过使用Delphi的强大功能扩展自定义FireMonkey的特性。这使得开发人员能够根据自己的需求进行广泛的定制,以实现创新和独特的用户界面设计。 总的来说,Delphi GUI编程与FireMonkey的结合可以充分释放FM的全部潜力。开发人员可以通过使用FireMonkey来创建功能强大、界面美观的应用程序,并实现跨平台的部署。FireMonkey不仅提供了丰富的界面控件和图形处理功能,还具有可扩展性和定制性,使开发人员能够灵活地创造出独特的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值