AppIconLoader.pas 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. unit AppIconLoader;
  2. //https://delphihaven.wordpress.com/2014/01/20/loading-the-apps-icon-into-a-timage-on-windows/
  3. interface
  4. uses
  5. System.SysUtils, System.Classes, FMX.Graphics;
  6. function GetAppIcon(Dest: TBitmap): Boolean;
  7. implementation
  8. uses
  9. {$IF DEFINED(ANDROID)}
  10. AndroidApi.JniBridge, AndroidApi.Jni.App,
  11. AndroidApi.Jni.GraphicsContentViewText, FMX.Helpers.Android,
  12. {$IF CompilerVersion > 27}Androidapi.Helpers, {$ENDIF}
  13. {$ELSEIF DEFINED(MSWINDOWS)}
  14. Vcl.Graphics,
  15. {$ENDIF}
  16. FMX.Surfaces;
  17. function GetAppIcon(Dest: FMX.Graphics.TBitmap): Boolean;
  18. {$IF DEFINED(ANDROID)}
  19. var
  20. Activity: JActivity;
  21. Drawable: JDrawable;
  22. Bitmap: JBitmap;
  23. Surface: TBitmapSurface;
  24. begin
  25. Result := False;
  26. {$IF CompilerVersion > 27}
  27. Activity := TAndroidHelper.Activity;
  28. {$ELSE}
  29. Activity := SharedActivity;
  30. {$ENDIF}
  31. Drawable := Activity.getPackageManager.getApplicationIcon(Activity.getApplicationInfo);
  32. Bitmap := TJBitmapDrawable.Wrap((Drawable as ILocalObject).GetObjectID).getBitmap;
  33. Surface := TBitmapSurface.Create;
  34. try
  35. if not JBitmapToSurface(Bitmap, Surface) then
  36. Exit;
  37. Dest.Assign(Surface);
  38. finally
  39. Surface.Free;
  40. end;
  41. Result := True;
  42. end;
  43. {$ELSEIF DEFINED(MSWINDOWS)}
  44. var
  45. Icon: TIcon;
  46. Stream: TMemoryStream;
  47. begin
  48. Result := False;
  49. Stream := nil;
  50. Icon := TIcon.Create;
  51. try
  52. Icon.LoadFromResourceName(HInstance, 'MAINICON');
  53. if Icon.Handle = 0 then Exit;
  54. Stream := TMemoryStream.Create;
  55. Icon.SaveToStream(Stream);
  56. Stream.Position := 0;
  57. Dest.LoadFromStream(Stream);
  58. finally
  59. Icon.Free;
  60. Stream.Free;
  61. end;
  62. Result := True;
  63. end;
  64. {$ELSE}
  65. begin
  66. Result := False;
  67. end;
  68. {$ENDIF}
  69. end.