2011-09-08 3 views

답변

0

이 기능은 LCL에 구현되어 있지 않으므로 사용하려면 다음을 사용해야합니다. 관련 코코아 프레임 워크를 직접적으로. ObjPas를 사용할 수 있습니다. 물론 LCL 구현을 작성하는 경우 나중에 Windows/Gnome에서 작동하도록 만들 수 있으므로 장기적으로 더 나은 솔루션이 될 것입니다.

0

Ludicrous late ...하지만이 게시물에 부딪 혔습니다. Lazarus 포럼에서 this post을 발견했습니다.이 포럼에서는 애플리케이션이 실행되는 동안 도크에서 애플리케이션 아이콘을 어떻게 변경할 수 있는지 코드를 보여줍니다.

원본 질문 이후 수년이 지난 후에도 동일한 질문에 대한 답변을 찾는 사람에게 유용하게 사용되기를 바랍니다. (적절하지 않은 경우 사과)

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;