如何在OSX中为lazarus应用添加dock-icon徽章和popupmenu支持?

时间:2011-09-08 13:09:36

标签: macos freepascal lazarus

我已经尝试使用Google搜索,但是在OSX上使用dock-icons的徽章功能以及访问停靠图标菜单时,我找不到任何帮助?我想我可以在运行期间更改停靠栏图标以指示某些内容已启动,但它不是那么光滑;)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

可笑得很晚......但我碰到了这篇文章,并在Lazarus论坛中找到this post,它显示了代码如何在应用程序运行时更改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;