DelphiのFMXの開発を行っております。
インターネット上のPDFを下記のようにTWebBrowserで開き、
ファイル共有メニューからPDFファイルそのものをSLACKなど渡すことは可能でしょうか?
WebBrowser1.Navigate('https://・・・/test.pdf');
ファイル共有メニューは下記方法で出すことはできますが、
テキストや画像しか扱えません。どなたか教えていただけると助かります。
■アクション リストを使用した写真とテキストの撮影と共有
https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Taking_and_Sharing_Pictures_and_Text_Using_Action_Lists
【バージョン】
RAD Studio 11 Alexandria
Embarcadero® Delphi 11.0 バージョン 28.0.42600.6491
タイトルと質問文が違うので何をしたいのかよくわかりませんが
インターネット上にpdfがあって urlがわかっている
それをSlackにアップロードしたい
ということならダウンロードしてアップロードすれば良いのでは?
730_ネット上のファイルをダウンロードして解凍 ( 自動実行 )
http://mrxray.on.coocan.jp/Delphi/plSamples/730_AutoDLDefrose.htm#01
Slackのfiles.upload APIを使ってファイルを簡単に連携する
https://smdbanana.hatenablog.com/entry/2020/01/27/121632
takeさん
返信が遅くなり、またはご説明も悪く、大変申し訳ございませんでした。
DelphiWorldsのKastriという素晴らしいライブラリで解決することができました。
https://github.com/DelphiWorlds/Kastri
サンプルソースは上記展開後の下記にあります。
Kastri-master\Demos\ShareItems
Unit1のソースを貼り付けておきます。
プログラムを起動し、ボタンをタップするとiOSのシェアシートメニューが表示され、
テンポラリフォルダにあるPDFをメニューに表示されたSlackやAirPrintの印刷処理に渡すことができるようになります。
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls,
DW.ShareItems, FMX.Objects, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, system.NetEncoding, IdSSLOpenSSL, System.Net.HttpClientComponent;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
FExcluded: TShareActivities;
FShareItems: TShareItems;
procedure Share;
procedure ShareItemsShareCompletedHandler(Sender: TObject; const AActivity: TShareActivity; const AError: string);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
uses
System.IOUtils, System.Permissions,
DW.Consts.Android, DW.Permissions.Helpers;
{ TForm1 }
constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
// Exclude all but the following - Note: applicable to iOS ONLY - uncomment the next line to test
// FExcluded := TShareItems.AllShareActivities - [TShareActivity.Message, TShareActivity.Mail, TShareActivity.CopyToPasteboard];
FShareItems := TShareItems.Create;
FShareItems.OnShareCompleted := ShareItemsShareCompletedHandler;
end;
destructor TForm1.Destroy;
begin
FShareItems.Free;
inherited;
end;
procedure TForm1.ShareItemsShareCompletedHandler(Sender: TObject; const AActivity: TShareActivity; const AError: string);
begin
// If AActivity is TShareActivity.None, then the user cancelled - except for Android because it does not tell you :-/
if AActivity = TShareActivity.None then
ShowMessage('Share cancelled')
else
ShowMessage('Share completed');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PermissionsService.RequestPermissions([cPermissionReadExternalStorage, cPermissionWriteExternalStorage],
procedure(const APermissions: TPermissionArray; const AGrantResults: TPermissionStatusArray)
begin
if AGrantResults.AreAllGranted then
Share;
end
);
end;
procedure TForm1.Share;
var
LSharedFileName: string;
begin
FShareItems.AddFile(TPath.Combine(TPath.GetTempPath, 'test.pdf'));
FShareItems.Share(Button1, FExcluded);
end;
end.
上記、日本語がおかしかったです。訂正します。
誤)返信が遅くなり、またはご説明も悪く、大変申し訳ございませんでした。
正)返信が遅くなり、また、ご説明も悪く、大変申し訳ございませんでした。
ツイート | ![]() |