![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
LoadFromFile
SMATMP © (2005-10-20 09:06:00)Уважаемые мастера! Необходимо загрузить содержимое файла в компонент. Возможно ли для отслеживания процента загрузки использовать промежуточный буфер или камим-либо образом отследить процент выполнения LoadFromFile? Функцию LoadFromClipboardиспользовать не хотелось бы, если при этом пропадает его предыдущее содержимое.
Заранее спасибо.
SMATMP (2005-10-21 16:40:00) [1]Спасибо, LVT! Коть какой-то конструктив. Буду дерзать. Про Диггера тоже неплохо. Только речь о том, чтобы нанести минимум ущерба производительности, а не максимум.
"Дорогу одолеет идущий"
Всех благ
clickmaker (2005-10-21 16:33:00) [2]
> визуальность можно обеспечить с помощью задержек
а нафига?
типа как в Диггере написанном под ХТ и запущенном на 386? там, помницца, спецальный замедлитель проца прикручивали
Anatoly Podgoretsky (2005-10-21 16:27:00) [3]clickmaker © (21.10.05 16:16) [11]
Не обязательно, например если я хочу, что бы прогресс имел минимум 10 шагов, то уже устроит файл размером в 10 байт и более и уж не составит проблемы определить размер блока для прогресса. И даже визуальность можно обеспечить с помощью задержек.
Тут уж действительно надо начинать с ножек.
Leonid Troyanovsky (2005-10-21 16:24:00) [4]
> SMATMP © (21.10.05 15:50) [10]
> Как быстро прочиталь блок в память? (если это правильный
> путь) и как его потом загрузить в компонент (или в свойство
> компонента)?
У тех компонентов, которые имеют LoadFromFile есть и метод LoadFromStream.
Поэтому, правильней всего, сделать своего потомка TFileStream,
переопределив (override) ему метод Read, который после вызова
Result := inherited Read(Buffer, Count); // прочтен буфер
известит вызывающего, например:
if Assigned(OnRead) then OnRead(Self);
где OnRead: TNotifyEvent назначается, например, в конструкторе.
Ну, а создавший этот поток при срабатывании OnRead может узнать,
например, текущую позицию (Sender as TMyFileStream).Position.
--
Regards, LVT.
clickmaker (2005-10-21 16:16:00) [5]
> SMATMP © (21.10.05 15:50) [10]
если уж ты замутил с прогрессом, значит подразумеваецца, что у тебя данных до фига и читацца они будут достаточно долго. Иначе - "идея оценки процента загрузки отпадает как абсурдная".
А уж какими блоками читать - тебе решать. Можно и по 8 кило, можно и по 64. Зависит от общего объема данных
SMATMP (2005-10-21 15:50:00) [6]Как быстро прочиталь блок в память? (если это правильный путь) и как его потом загрузить в компонент (или в свойство компонента)?
Быстро - я имею в виду, что открыв вайл и читая из него, скажем, по одному байту скорость будет не ахти. По сравнению с этим LoadFromFile будет работать мнгновенно и идея оценки процента загрузки отпадает как абсурдная. Если можно - код.
Может быть эта тема должна звучать по другому, скажем как работать с буфером и что-то в этом роде?
Digitman (2005-10-21 15:33:00) [7]
> SMATMP © (21.10.05 15:24) [7]
судя по твоим познаниям в этой области, ты поставил себе непосильную на дан.момент задачу.
clickmaker (2005-10-21 15:33:00) [8]
> Поэтому и спрашиваю - как это отследить для LoadFromFile
> или как написать аналог этой процедуры с количественным
> отслеживанием процесса загрузки
ты ж сам сказал "чтение блоками в память".
Вот и читай, после каждого блока увеличивай прогресс. Ну типа, прочел блок - увеличил позицию ProgressBar
SMATMP (2005-10-21 15:24:00) [9]В основном для Digitman.
begin
ShowMessage('You're dummy !');
end;
Для загрузки инфы из файла процедура должна структуру немного сложней иметь насколько я понимаю. Как минимум чтение блоками в память и из нее. Скажем есть же у компонентов обработчик события OnProgress. Оно не всегда действительно работает, но принципиально такое возможно, скажем для JPEG в Bitmap (TImage).
Не знаю как это реализовано, но есть. Поэтому и спрашиваю - как это отследить для LoadFromFile или как написать аналог этой процедуры с количественным отслеживанием процесса загрузки.
clickmaker (2005-10-21 14:12:00) [10]
> Возможно ли для отслеживания процента загрузки использовать
> промежуточный буфер или камим-либо образом отследить процент
> выполнения LoadFromFile
написать наследника компонента с переопределенной LoadFromFile, где ты сам будешь сообщать проге процент
Digitman (2005-10-21 13:26:00) [11]
> SMATMP © (21.10.05 13:18) [4]
> При этом происходит загрузка содержимого файла в компонент?
нет.
при этом происходит чтение из файла инф-ции, которую каждый из этих компонентов интерпретирует по-разному.
к примеру, вот я как разработчик некоего компонента TDummyComponent объявил и реализовал его метод LoadFromFile() так :
procedure TDummyComponent.LoadFromFile(const FileName: String);
begin
ShowMessage('You're dummy !');
end;
а теперь скажи, как ты себе мыслишь тот самый "процент" ..
SMATMP (2005-10-21 13:18:00) [12]Ну насколько я понимаю - и TImage и TMemo являются компонентами приложения? С помощью LoadFromFile можно заполнить их свойства Picture (Bitmap) и Text? При этом происходит загрузка содержимого файла в компонент? Где здесь нет логики? Мне только необходимо оценить количественно этот процесс и всё.
Digitman (2005-10-21 12:02:00) [13]
> Программист без логики что стул без ножек
вот именно.
поэтому, если ты не стул без ножек, вдумайся в абстракностьсказанного тобой - "загрузить содержимое файла в компонент"
SMATMP (2005-10-21 11:09:00) [14]Что это значит? Программист без логики что стул без ножек...
Плохиш (2005-10-20 10:44:00) [15]Возможно, но для этого нужен программист, имеющий логическое мышление.