Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtDlgs, IdHTTP, cefvcl, ceflib;
- const
- MENU_ID_SAVE_IMAGE_AS = Ord(MENU_ID_USER_FIRST) + 1;
- type
- TDownloader = class(TThread)
- private
- FURL: string;
- FFileName: string;
- protected
- procedure Execute; override;
- public
- constructor Create(const URL, FileName: string); reintroduce;
- end;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Chromium1: TChromium;
- SavePictureDialog1: TSavePictureDialog;
- procedure FormCreate(Sender: TObject);
- procedure Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
- const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
- procedure Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser;
- const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer;
- eventFlags: TCefEventFlags; out Result: Boolean);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- { TDownloader }
- constructor TDownloader.Create(const URL, FileName: string);
- begin
- inherited Create(False);
- FreeOnTerminate := True;
- FURL := URL;
- FFileName := FileName;
- end;
- procedure TDownloader.Execute;
- var
- HTTPClient: TIdHTTP;
- FileStream: TFileStream;
- begin
- try
- HTTPClient := TIdHTTP.Create;
- try
- FileStream := TFileStream.Create(FFileName, fmCreate);
- try
- HTTPClient.Get(FURL, FileStream);
- finally
- FileStream.Free;
- end;
- finally
- HTTPClient.Free;
- end;
- except
- // error handling ignored for this example
- end;
- end;
- { TForm1 }
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- Chromium1.Load('http://www.google.com/');
- end;
- procedure TForm1.Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
- const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
- begin
- if (CM_TYPEFLAG_MEDIA in params.TypeFlags) and (params.MediaType = CM_MEDIATYPE_IMAGE) then
- model.AddItem(MENU_ID_SAVE_IMAGE_AS, 'Save image as...');
- end;
- procedure TForm1.Chromium1ContextMenuCommand(Sender: TObject; const browser: ICefBrowser;
- const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer;
- eventFlags: TCefEventFlags; out Result: Boolean);
- var
- SaveDialog: TSavePictureDialog;
- begin
- if (commandId = MENU_ID_SAVE_IMAGE_AS) then
- begin
- SaveDialog := TSavePictureDialog.Create(nil);
- try
- // SaveDialog.FileName := <here you can extract file name from params.SourceUrl>;
- // SaveDialog.DefaultExt := <here you can extract file ext from params.SourceUrl>;
- if SaveDialog.Execute then
- TDownloader.Create(params.SourceUrl, SaveDialog.FileName);
- finally
- SaveDialog.Free;
- end;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment