Tidtcpserver и progressbar

Shouldercannon

Well-known member
25.05.2010
128
0
#1
Пытаюсь подключить ProgressBar к TIdTCPServer
Код:
unit Unit1;
...
const
Host = '192.168.0.10';
Port = 1120;
MY_MESS = WM_USER + 105;
type
TForm1 = class(TForm)
...
private
{ Private declarations }
procedure MyProgress(var Msg: TMessage); message MY_MESS;
procedure Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
procedure WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Int64);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
FS: TFileStream;
FPath, FName: String;
begin
FPath := ExtractFilePath(Application.ExeName) + 'Downloads';
FName := AContext.Connection.IOHandler.ReadLn;
if not DirectoryExists(FPath) then ForceDirectories(FPath);
FS := TFileStream.Create(FPath + '\' + ExtractFileName(FName), fmCreate); // Сохранение
try
{ProgressBar1.Max := AContext.Connection.IOHandler.ReadLongInt; //!// Не скачивается 4 байта
ProgressBar1.Position := 0;}
AContext.Connection.OnWork := Work;
AContext.Connection.OnWorkBegin := WorkBegin;
AContext.Connection.IOHandler.ReadStream(FS, -1, True); // Поток передаваемый клиентом
finally
FreeAndNil(FS);;
end;
AContext.Connection.Disconnect;
Label1.Caption := 'Файл принят';
end;
procedure TForm1.MyProgress(var Msg: TMessage);
begin
case Msg.WParam of
0: begin
ProgressBar1.Max := Msg.LParam;
ProgressBar1.Position := 0;
end;
1: ProgressBar1.Position := Msg.LParam;
end;
end;
procedure TForm1.Work(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Int64);
begin
PostMessage(Self.Handle, MY_MESS, 1, AWorkCount);
end;
procedure TForm1.WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Int64);
begin
PostMessage(Self.Handle, MY_MESS, 0, AWorkCountMax);
end;
end.
AWorkCountMax равен нулю, зато AWorkCount не равен нулю.
Сделал так
Код:
ProgressBar1.Max := AContext.Connection.IOHandler.ReadLongInt;
И получил проблемы:
1. ProgressBar доходит только до 1/3
2. Файл скачивается не полностью
Отправляемый файл: 344 МБ (361*402*544 байт)
Полученный файл: 344 МБ (361*402*540 байт)
4 байта тю-тю