Macos 如何在OSX中为lazarus应用程序添加dock图标徽章和弹出菜单支持?

Macos 如何在OSX中为lazarus应用程序添加dock图标徽章和弹出菜单支持?,macos,freepascal,lazarus,Macos,Freepascal,Lazarus,我试过用谷歌搜索abit,但在OSX上使用dock图标的徽章功能以及访问dock图标菜单方面找不到任何帮助?我想我可以在跑步过程中更改停靠图标,以指示有什么事情发生了,但它没有那么光滑;) 此功能未在LCL中实现,因此如果要使用它,必须直接使用相关的Cocoa框架。您可以使用ObjPas来实现这一点。当然,如果您准备编写LCL实现,这将是一个更好的长期解决方案,因为它可以在以后的Windows/Gnome上使用。此功能不在LCL中实现,因此如果您想使用它,您必须直接使用相关的Cocoa框架。您可

我试过用谷歌搜索abit,但在OSX上使用dock图标的徽章功能以及访问dock图标菜单方面找不到任何帮助?我想我可以在跑步过程中更改停靠图标,以指示有什么事情发生了,但它没有那么光滑;)

此功能未在LCL中实现,因此如果要使用它,必须直接使用相关的Cocoa框架。您可以使用ObjPas来实现这一点。当然,如果您准备编写LCL实现,这将是一个更好的长期解决方案,因为它可以在以后的Windows/Gnome上使用。

此功能不在LCL中实现,因此如果您想使用它,您必须直接使用相关的Cocoa框架。您可以使用ObjPas来实现这一点。当然,如果您准备编写LCL实现,这将是一个更好的长期解决方案,因为它可以在以后在Windows/Gnome上工作。

太晚了。。。但我无意中发现了这篇文章,并在Lazarus论坛上找到了这篇文章,它展示了如何在应用程序运行时更改dock中的应用程序图标

希望它能对那些正在寻找同一问题答案的人有所帮助,即使是在发布原始问题多年之后。(如果不合适,请道歉)


可笑的迟到。。。但我无意中发现了这篇文章,并在Lazarus论坛上找到了这篇文章,它展示了如何在应用程序运行时更改dock中的应用程序图标

希望它能对那些正在寻找同一问题答案的人有所帮助,即使是在发布原始问题多年之后。(如果不合适,请道歉)

uses
... MacOSAll ...


procedure TFrm_Main.FormCreate(Sender: TObject);
begin
  ...
  FResPath := TrimFilename(ExtractFilePath(Application.ExeName) + PathDelim + 'Resource');
  ...
end;

procedure TFrm_Main.SomeEventWhenOverlay(SomeVar: Integer);
var
  temp_ImagePath: String;
  temp_CGDataProvider: CGDataProviderRef;
  temp_Float32Ptr: Float32Ptr;
  temp_CGImage: CGImageRef;
  temp_CGContext: CGContextRef;
begin
  temp_ImagePath := TrimFilename(FResPath + PathDelim + 'Image' + PathDelim + 'overlay_image.png'); // image must be same size as icon, if not, will be deformed
  if (FileExists(temp_ImagePath)) then
  begin
    temp_CGDataProvider := CGDataProviderCreateWithFilename(PChar(temp_ImagePath));
    temp_Float32Ptr := nil;
    temp_CGImage := CGImageCreateWithPNGDataProvider(temp_CGDataProvider, temp_Float32Ptr, 1, kCGRenderingIntentDefault);
    CGDataProviderRelease(temp_CGDataProvider);
    // Draw image
    temp_CGContext := BeginCGContextForApplicationDockTile;
    //SetApplicationDockTileImage(temp_CGImage);
    OverlayApplicationDockTileImage(temp_CGImage);
    CGImageRelease(temp_CGImage);
    EndCGContextForApplicationDockTile(temp_CGContext);
  end;   
end;

procedure TFrm_Main.SomeOtherEventWhenRestore();
begin
  //This will not work if you use SetApplicationDockTileImage
  RestoreApplicationDockTileImage;
end;