![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сколько байт осталось переслать? [D6, WinME]
Александр из Минска © (2004-04-10 17:21:00)Вот я пересылаю файлик. Хочу показать ProgressBar для состояния его закачки. Только никак не могу найти, как узнать сколько байт я уже переслал. Помогите, пожалуйста...
Я использую TIdTCPServer and TIdTCPClient
Файл посылаю так: IdTCPServer.WriteStream(...
Александр из Минска (2004-04-14 23:17:00) [1]Огромное Спасибо! Теперь все будет великолепно!!!
Polevi (2004-04-14 17:40:00) [2]>Verg © (14.04.04 17:19) [4]
гениально
и как мне в головоу такое не пришло ?
Verg (2004-04-14 17:19:00) [3]Смотря какой Stream передаешь.
Одним словом, создаешь наследника этого самого Stream, например:
TMyFileStream = class(TFileStream)
function Read(var buf; Count : integer):integer; override;
end;
function TMyFileStream.Read(var buf; Count : integer):integer;
begin
result := inherited Read(Buf, Count);
// Вот здесь увеличиваешь прогресс бар на величину result
end;
Ну а передаешь именно этого класса потоки
var
Str : TMyFileStream;
begin
Str := TMyFileStream.Create(Filename, fmOpenRead or fmShareDaynyWrite);
....WriteStream(Str);
.....
Digitman (2004-04-14 17:17:00) [4]кто ж тебя понуждает стримом посылать/принимать ? посылай/принимай блоками удобного размера !
блок передал - хрясь ! - обновил прогресс-бар передатчика..
блок принял - хрясь ! - обновил прогресс-бар приемника..
Polevi (2004-04-14 17:09:00) [5]плохой совет, но если очень сильно хочется - можно другим потоком читать значение Stream.Position
Александр из Минска (2004-04-14 16:52:00) [6]Неужели нет вариантов. Мне уже советовали смотреть размер файла, который создается во время его передачи из сервера на клиент. Но этот способ не очень хорош, т.к. IDCTPClient.ReadStream(...) полностью все действия моей программы останавливает (ни таймер ни что другое не работает => во время закачки не видно того, как ProgressBar рисует ползунок и проценты)!
Пожалуйста, помогите решить эту проблему!