Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Возможно, но для этого нужен программист, имеющий логическое мышление.


Наверх

Титульная страница Поиск, карта сайта Написать письмо