Форум: "Основная";
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c