Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-69842
Explorer
2002-04-11 08:39
2002.04.22
Перевод строки


1-69893
ymin
2002-04-09 12:21
2002.04.22
А как сделать, чтобы форма была или на весь экран или Minimize?


6-69942
Davile
2002-02-07 15:56
2002.04.22
TClientSocket


3-69653
Зинец Виктор
2002-03-27 11:00
2002.04.22
Доступ к базе данных через инет


3-69662
Zombie
2002-04-03 07:11
2002.04.22
Как избавиться от временных файлов Query???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский