Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.22;
Скачать: CL | DM;

Вниз

RichEdit или Memo! Как загружать фалы больших размеров только для   Найти похожие ветки 

 
Kurt   (2002-04-08 10:14) [0]

RichEdit или Memo! Как загружать файлы больших размеров в эти компоненты только для чтения, чтоб максимально быстро?
А то существуюшие просмотрщики (например в Far, Windows Commander и т.п.) это делают достаточно быстро. Как такого достигнуть?
Помогите плиз!


 
gek   (2002-04-08 10:25) [1]

В memo > 32 kb не загрузишь
В Rich около 200 кб (точно не помню)

Метод LoadFromFile


 
Kurt   (2002-04-08 11:19) [2]

Да ты чяго!:-) я в мемо загружал около 20 Мегабайт и усе работало, просто на "слабых" машинах это не катило и я воспользовался RichEdit, все получилось, но скоростью явно не удволетворен. А про метод LoadFromFile знаю:-) Просто вопрос именно о скорости...


 
gek   (2002-04-08 11:31) [3]

> Kurt (08.04.02 11:19)

я не знаю что и как ты грузишь в memo
Насчет 20 Мегабайт большие сомнения

А вот и help
Under Win 9x, there is a limit of 64k of text for this control.

Может сначала почитать надо, прежде чем ерунду писать


 
Kurt   (2002-04-08 15:01) [4]

У меня Windows2000. Так вот, ты сам попробуй и увидешь, что можно загрузить. Я же тоже тебе не от балды пишу, а уже сам на своем опыте.
Да и суть не в этом. Мне именно скорость загрузки и открытия для чтения важна!


 
gek   (2002-04-08 15:19) [5]

Может под Windows2000 и так приду домой посмотрю.

Насчет скорости
тогда чисто опытным путем LoadFromStream или LoadFromFile


 
Kurt   (2002-04-08 15:22) [6]

Кстати, тут проверил и под 98 покатило, только иной раз глючит со скролингом.


 
Виктор Щербаков ©   (2002-04-08 15:29) [7]

Под 2000 действительно ограничения 32 кб нет. Даже в блокноте можно очень большие файлы смотреть.
А насчет скорости, идея простая:
делай через проецируемый файл. Работать с файлом будешь как со строкой в памяти, а свопом будет управлять ОС.


 
Kurt   (2002-04-08 15:32) [8]

gek! А поподробнее расскажи плиз как с LoadFromStream работать, а то найти инфы в литературе не могу. просто до этого не использовал.

Виктор! А поподробнее расписать можно, а то че-то как-то не дошло:-). Заранее благодарен!


 
Виктор Щербаков ©   (2002-04-08 15:47) [9]

Открываем файл с помощью функции CreateFile.
Вызываем CreateFileMapping, для создания проецируемого файла.
Отображаем его в память с помощью MapViewOfFile. Эта функция возвращает адрес проекции файла. Получив его, можно работать с отображенным файлом, как с обычным участком памяти, т.е. выводить его содержимое в виде текста в эл. управления и т.д.
Именно этот метод даст требуемую скорость и простоту.

Упомянутые просмотрщики не читают весь файл целиком в память, а только ту его часть, которая в данный момент нужна для отображения.


 
Kurt   (2002-04-08 15:59) [10]

Виктор! Большое спасибо!
Только можешь для полной ясности написать пример кода, как вот этот участок памяти отобразить в виде текста в нужную компоненту (Мемо допустим).....
А так большущее спасибо. Теперь стало ясно немного.


 
Kurt   (2002-04-08 16:00) [11]

И напоследок не подскажите как c помощью LoadFromStream загрузить файл в компоненту. плиз!


 
Alx2 ©   (2002-04-08 16:09) [12]


SourceHFILE := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ,
Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If SourceHFILE = INVALID_HANDLE_VALUE Then exit;
fileSize := GetFileSize(SourceHFILE, Nil);
If fileSize = 0 Then
Begin
CloseHandle(SourceHFILE);
exit;
End;
SourcehFileMap := CreateFileMapping(SourceHFILE, Nil, PAGE_READONLY, 0, fileSize, Nil);
CloseHandle(SourceHFILE);
If SourcehFileMap = 0 Then exit;
SourcepvFile := MapViewOfFile(SourcehFileMap, FILE_MAP_READ, 0, 0, 0); // Вот это место теперь - Pointer на проекцию файла.
If SourcepvFile = Nil Then
Begin
CloseHandle(SourcehFileMap);
exit;
End;

А смотреть его можно, как обычный участок памяти.
Например, подсчитать кол-во пробелов:
Var ch : ^Char;
begin
...........
Ch := SourcePvFile;
Count := 0;
For K := 1 To fileSize Do
Begin
If Ch^ =" " Then inc(Count);
inc(Ch);
End;
end;


 
Kurt   (2002-04-08 16:13) [13]

А вывести этот участок памяти в Меmo допустим? и чтоб двигаясь по Мemo все подгружалось и т.п.?


 
Kurt   (2002-04-08 17:32) [14]

АУ! помогите плиз до конца!


 
Kurt   (2002-04-08 17:55) [15]

Alx2! Виктор! а как вот не целиком читая файл из памяти, загрузить его в Memo (richEdit)???


 
Kurt   (2002-04-08 17:56) [16]

Alx2! Виктор! а как вот не целиком читая файл из памяти, загрузить его в Memo (richEdit)??? ну плодгружая по надобности...


 
Alx2 ©   (2002-04-09 10:00) [17]

>а как вот не целиком читая файл из памяти, загрузить его
>в Memo (richEdit)??? ну плодгружая по надобности...
Конкретнее. Что непонятно?


 
Anatoly Podgoretsky ©   (2002-04-09 10:54) [18]

Наверно не знаком с методами TRixhEdit и справки нет


 
Kurt   (2002-04-10 10:20) [19]

Ну получил я указатель в памяти на файл. Дальше как мне не целиком подгружая по надобности загружать в Memo (RichEdit)?

Анатолий! Что за методы, подскажи! Ты RichEdit имеешь ввиду?


 
Alx2 ©   (2002-04-10 10:45) [20]

Например, держишь указатель на позицию в файле для самой верхней строчки в memo. При скроллинге изменяешь его и подсовываешь в memo обновленные данные.



Страницы: 1 вся ветка

Текущий архив: 2002.04.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
1-69824
Кулюкин Олег
2002-04-05 08:56
2002.04.22
Ищу компонент - HTML viewer


3-69699
Jaric
2002-03-30 14:26
2002.04.22
Как общаться через ADO компоненты через SPX/IPX протокол?


14-69974
lipskiy
2002-03-13 04:10
2002.04.22
И когда это вы все всё успеваете?


3-69712
Timka
2002-03-26 18:54
2002.04.22
Помогите серенькому!!!


1-69794
Yakudza
2002-04-09 17:49
2002.04.22
TButton