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

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

Файл больше 136 КБ


Prov ©   (2003-07-24 10:23:00) 

Здравствуйте, Мастера...
Такой вопрос-проблема:

Есть многострочный эдит, писанный на АПИ.Так я загружаю в него текст из файла:
procedure LoadFile;
var Path: AnsiString; Buffer: array[1..MAXIMUM_ALLOWED div 200] of PChar;
begin
FillChar(Buffer, SizeOf(Buffer), 0);
Path:= GetOpenFilePath;
if Length(Path)>0 then
begin
StreamLoad.Free;
StreamLoad:= TFileStream.Create(Path, fmOpenRead or fmShareExclusive);
StreamLoad.Read(Buffer, SizeOf(Buffer));
( hEdit, @Buffer)

Здравствуйте, Мастера...
Такой вопрос-проблема:

Есть многострочный эдит, писанный на АПИ.Так я загружаю в него текст из файла:
procedure LoadFile;
var Path: AnsiString; Buffer: array[1..MAXIMUM_ALLOWED div 200] of PChar;
begin
FillChar(Buffer, SizeOf(Buffer), 0);
Path:= GetOpenFilePath;
if Length(Path)>0 then
begin
StreamLoad.Free;
StreamLoad:= TFileStream.Create(Path, fmOpenRead or fmShareExclusive);
StreamLoad.Read(Buffer, SizeOf(Buffer));
SetWindowText(hEdit, @Buffer);
end;
end;


Но....

Максимум в него влазит 136 КБ и всё ! А нужно открывать файлы до 5 Мб...

Помогите, пожалуйста.
Заранее благодарен.


Prov   (2003-07-28 09:25:00) [1]

Спасибо Вам большое, мастера.

Всё получилось.


Verg   (2003-07-26 17:15:00) [2]

var S : string;
....

StreamLoad:= TFileStream.Create(Path, fmOpenRead or fmShareExclusive);
SetLength(S, StreamLoad.Size)
StreamLoad.Read(S[1], StreamLoad.Size);
SetWindowText(hEdit, Pchar(S));
....


Набережных С.   (2003-07-24 20:43:00) [3]

MAXIMUM_ALLOWED = $02000000. Если поделить на 200, то около того и будет. Это константа из secuity, ни к каким размерам отношения не имеющая. Если, конечно, автор вопроса ее не переопределил, что вряд-ли.


Verg   (2003-07-24 16:37:00) [4]


> Buffer: array[1..MAXIMUM_ALLOWED div 200] of PChar;


Это типа локальня переменная, т.е. значит в стеке. В стеке не принято размещать очень много данных, если память мне не изменяет, то на процесс по мегабайту стека отведена.
В любом случае
1. MAXIMUM_ALLOWED - величина нам неизвестная
2. Если файл размером будет больше, чем MAXIMUM_ALLOWED div 200,
в Buffer - е будет не null-terminated string и, т.о., чем
закончится SetWindowText неизвестно, может и AV


clickmaker   (2003-07-24 15:50:00) [5]

Вообще-то неправильно это: городить статические буфера такого размера.

Buffer := PChar(GlobalAlloc(Size, GPTR)) - так грамотнее


Prov   (2003-07-24 14:57:00) [6]

Ну может, подскажите, если не затруднит, что там заместь 200 надо поставить...

Если ставлю <200, программа просто вылетает на этом(Access Violation)


Anatoly Podgoretsky   (2003-07-24 14:51:00) [7]

var
Path: AnsiString; Buffer: array[1..MAXIMUM_ALLOWED div 200] of Char;

Разобраться также с 200


Prov   (2003-07-24 14:31:00) [8]

Блин !!! Ничего не понял ....
Извиняюсь, можна поподробнее..


Prov   (2003-07-24 14:22:00) [9]

Может быть..... Спасибо большое, буду щас пробовать.


clickmaker   (2003-07-24 10:36:00) [10]

А что это за загадочное выражение: MAXIMUM_ALLOWED div 200 ?
Может нужно EM_LIMITTEXT послать ?


Наверх

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