Как добавить значок значка док-станции и поддержку всплывающего меню для приложений Lazarus в OSX? - PullRequest
2 голосов
/ 08 сентября 2011

Я пытался поискать в abit, но не могу найти какую-либо помощь в использовании функции значка значков док-станции в OSX, а также в получении доступа к меню значков док-станции? Я думаю, я мог бы изменить значок док-станции во время работы, чтобы указать, что что-то не так, но это не так гладко;)

Ответы [ 2 ]

0 голосов
/ 26 июня 2014

Смехотворно поздно ... но я наткнулся на этот пост и нашел этот пост на форуме Lazarus, который показывает код, как вы можете изменить значок приложения в доке во время работы приложения.

Надеюсь, он будет полезен для тех, кто ищет ответ на тот же вопрос, хотя прошло несколько лет после публикации исходного вопроса.(извиняюсь, если это не подходит)

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; 
0 голосов
/ 03 февраля 2012

Эта функция не реализована в LCL, поэтому, если вы хотите ее использовать, вам придется напрямую использовать соответствующую инфраструктуру Cocoa.Вы можете использовать ObjPas для этого.Конечно, если вы готовы написать реализацию LCL, это было бы лучшим долгосрочным решением, так как оно могло бы быть выполнено для работы в Windows / Gnome позже.

...