Tidtcpserver и progressbar

Тема в разделе "Delphi - Компоненты", создана пользователем Shouldercannon, 20 фев 2016.

  1. Shouldercannon

    Shouldercannon Well-Known Member

    Регистрация:
    25 май 2010
    Сообщения:
    125
    Симпатии:
    0
    Пытаюсь подключить ProgressBar к TIdTCPServer
    Код (Delphi):
    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 не равен нулю.
    Сделал так
    Код (Delphi):
    ProgressBar1.Max := AContext.Connection.IOHandler.ReadLongInt;
    И получил проблемы:
    1. ProgressBar доходит только до 1/3
    2. Файл скачивается не полностью
    Отправляемый файл: 344 МБ (361*402*544 байт)
    Полученный файл: 344 МБ (361*402*540 байт)
    4 байта тю-тю
     
Загрузка...
Похожие Темы - Tidtcpserver progressbar
  1. Shouldercannon
    Ответов:
    0
    Просмотров:
    493
  2. BlackShadow
    Ответов:
    2
    Просмотров:
    3.008
  3. medin84
    Ответов:
    8
    Просмотров:
    3.679
  4. LuMee
    Ответов:
    5
    Просмотров:
    3.811

Поделиться этой страницей