1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- unit AppIconLoader;
- //https://delphihaven.wordpress.com/2014/01/20/loading-the-apps-icon-into-a-timage-on-windows/
- interface
- uses
- System.SysUtils, System.Classes, FMX.Graphics;
- function GetAppIcon(Dest: TBitmap): Boolean;
- implementation
- uses
- {$IF DEFINED(ANDROID)}
- AndroidApi.JniBridge, AndroidApi.Jni.App,
- AndroidApi.Jni.GraphicsContentViewText, FMX.Helpers.Android,
- {$IF CompilerVersion > 27}Androidapi.Helpers, {$ENDIF}
- {$ELSEIF DEFINED(MSWINDOWS)}
- Vcl.Graphics,
- {$ENDIF}
- FMX.Surfaces;
- function GetAppIcon(Dest: FMX.Graphics.TBitmap): Boolean;
- {$IF DEFINED(ANDROID)}
- var
- Activity: JActivity;
- Drawable: JDrawable;
- Bitmap: JBitmap;
- Surface: TBitmapSurface;
- begin
- Result := False;
- {$IF CompilerVersion > 27}
- Activity := TAndroidHelper.Activity;
- {$ELSE}
- Activity := SharedActivity;
- {$ENDIF}
- Drawable := Activity.getPackageManager.getApplicationIcon(Activity.getApplicationInfo);
- Bitmap := TJBitmapDrawable.Wrap((Drawable as ILocalObject).GetObjectID).getBitmap;
- Surface := TBitmapSurface.Create;
- try
- if not JBitmapToSurface(Bitmap, Surface) then
- Exit;
- Dest.Assign(Surface);
- finally
- Surface.Free;
- end;
- Result := True;
- end;
- {$ELSEIF DEFINED(MSWINDOWS)}
- var
- Icon: TIcon;
- Stream: TMemoryStream;
- begin
- Result := False;
- Stream := nil;
- Icon := TIcon.Create;
- try
- Icon.LoadFromResourceName(HInstance, 'MAINICON');
- if Icon.Handle = 0 then Exit;
- Stream := TMemoryStream.Create;
- Icon.SaveToStream(Stream);
- Stream.Position := 0;
- Dest.LoadFromStream(Stream);
- finally
- Icon.Free;
- Stream.Free;
- end;
- Result := True;
- end;
- {$ELSE}
- begin
- Result := False;
- end;
- {$ENDIF}
- end.
|