mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-08 01:45:32 +00:00
167 lines
4.8 KiB
ObjectPascal
167 lines
4.8 KiB
ObjectPascal
(*
|
|
Name: UfrmDownloadProgress
|
|
Copyright: Copyright (C) SIL International.
|
|
Documentation:
|
|
Description:
|
|
Create Date: 4 Dec 2006
|
|
|
|
Modified Date: 18 May 2012
|
|
Authors: mcdurdin
|
|
Related Files:
|
|
Dependencies:
|
|
|
|
Bugs:
|
|
Todo:
|
|
Notes:
|
|
History: 04 Dec 2006 - mcdurdin - Initial version
|
|
05 Dec 2006 - mcdurdin - Localize caption
|
|
15 Jan 2007 - mcdurdin - Use font from locale.xml
|
|
04 Jun 2007 - mcdurdin - Initial version - for setup
|
|
19 Jun 2007 - mcdurdin - I817 - Translate to Unicode and remove Forms dependence
|
|
23 Aug 2007 - mcdurdin - Initial version from Desktop
|
|
31 Mar 2011 - mcdurdin - I2855 - Keyman Developer online update crashes with Integer Overflow
|
|
18 May 2012 - mcdurdin - I3306 - V9.0 - Remove TntControls + Win9x support
|
|
*)
|
|
unit UfrmDownloadProgress; // I3306
|
|
|
|
interface
|
|
|
|
uses
|
|
CommCtrl, resource,
|
|
SetupForm, TntDialogHelp, Windows, Messages, SysUtils, Variants, Classes, httpuploader;
|
|
|
|
const
|
|
WM_USER_FormShown = WM_USER+100;
|
|
type
|
|
TfrmDownloadProgress = class;
|
|
|
|
TDownloadProgressCallback = procedure(Owner: TfrmDownloadProgress; var Result: Boolean) of object;
|
|
|
|
TfrmDownloadProgress = class(TSetupForm)
|
|
procedure FormShow(Sender: TObject); override;
|
|
procedure cmdCancelClick(Sender: TObject);
|
|
private
|
|
FCallback: TDownloadProgressCallback;
|
|
FCancel: Boolean;
|
|
Max: Int64; // I2855
|
|
procedure WMUserFormShown(var Message: TMessage); message WM_USER_FormShown;
|
|
public
|
|
function DialogID: Integer; override;
|
|
procedure DlgMain(var Message: TMessage); override;
|
|
function ProcessCommand(ID, NotificationCode: Integer; hControl: HWND): Boolean; override;
|
|
|
|
procedure HTTPCheckCancel(Sender: THTTPUploader; var Cancel: Boolean);
|
|
//procedure HTTPFileProgress(Sender: THTTPUploader; const FileName: string; dwFileBytesSent, dwLocalFileSize, dwSecondsToFileCompletion, dwOverallBytesSent, dwOverallBytesTotal, dwSecondsToOverallCompletion, dwBytesPerSecond: DWord);
|
|
procedure HTTPStatus(Sender: THTTPUploader; const Message: string; Position, Total: Int64); // I2855
|
|
property Callback: TDownloadProgressCallback read FCallback write FCallback;
|
|
property Cancel: Boolean read FCancel;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{R *.dfm}
|
|
|
|
procedure TfrmDownloadProgress.cmdCancelClick(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
FCancel := True;
|
|
end;
|
|
|
|
procedure TfrmDownloadProgress.HTTPCheckCancel(Sender: THTTPUploader; var Cancel: Boolean);
|
|
begin
|
|
Cancel := FCancel;
|
|
end;
|
|
|
|
{procedure TfrmDownloadProgress.HTTPFileProgress(
|
|
Sender: THTTPUploader; const FileName: string; dwFileBytesSent,
|
|
dwLocalFileSize, dwSecondsToFileCompletion, dwOverallBytesSent,
|
|
dwOverallBytesTotal, dwSecondsToOverallCompletion, dwBytesPerSecond: DWord);
|
|
begin
|
|
progress.Max := dwOverallBytesTotal;
|
|
progress.Position := dwOverallBytesSent;
|
|
progress.Update;
|
|
Application.ProcessMessages;
|
|
end;}
|
|
|
|
procedure TfrmDownloadProgress.HTTPStatus(Sender: THTTPUploader;
|
|
const Message: string; Position, Total: Int64); // I2855
|
|
var
|
|
msg: TMsg;
|
|
begin
|
|
Max := Total;
|
|
if Max = 0 then
|
|
begin
|
|
Max := 100;
|
|
SendDlgItemMessage(Handle, IDC_PROGRESS1, PBM_SETRANGE, 0, MAKELONG(0, 100));
|
|
end;
|
|
|
|
SendDlgItemMessage(Handle, IDC_PROGRESS1, PBM_SETPOS, Position * 100 div Max, 0);
|
|
UpdateWindow(GetDlgItem(Handle, IDC_STATUS));
|
|
UpdateWindow(GetDlgItem(Handle, IDC_PROGRESS1));
|
|
SetWindowText(GetDlgItem(Handle, IDC_STATUS), PWideChar(Message));
|
|
|
|
while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
|
|
begin
|
|
if not IsDialogMessage(Handle, msg) then
|
|
begin
|
|
TranslateMessage(msg);
|
|
DispatchMessage(msg);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TfrmDownloadProgress.ProcessCommand(ID, NotificationCode: Integer;
|
|
hControl: HWND): Boolean;
|
|
begin
|
|
Result := True;
|
|
case ID of
|
|
IDCANCEL: cmdCancelClick(Self);
|
|
else Result := False;
|
|
end;
|
|
end;
|
|
|
|
function TfrmDownloadProgress.DialogID: Integer;
|
|
begin
|
|
Result := 101;
|
|
end;
|
|
|
|
procedure TfrmDownloadProgress.DlgMain(var Message: TMessage);
|
|
begin
|
|
case Message.Msg of
|
|
WM_USER_FormShown:
|
|
WMUserFormShown(Message);
|
|
else inherited;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmDownloadProgress.FormShow(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
PostMessage(Handle, WM_USER_FormShown, 0, 0);
|
|
end;
|
|
|
|
procedure TfrmDownloadProgress.WMUserFormShown(var Message: TMessage);
|
|
var
|
|
Result: Boolean;
|
|
begin
|
|
Result := False;
|
|
FCancel := False;
|
|
UpdateWindow(Handle);
|
|
try
|
|
if Assigned(FCallback) then
|
|
FCallback(Self, Result);
|
|
if Result
|
|
then ModalResult := mrOk
|
|
else ModalResult := mrCancel;
|
|
except
|
|
on EHTTPUploaderCancel do ModalResult := mrCancel;
|
|
on E:EHTTPUploader do
|
|
begin
|
|
ShowMessageW(E.Message);
|
|
ModalResult := mrCancel;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|