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

Вниз

Файл больше 136 КБ   Найти похожие ветки 

 
Prov ©   (2003-07-24 10:23) [0]

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

Есть многострочный эдит, писанный на АПИ.Так я загружаю в него текст из файла:
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 Мб...

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


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

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


 
Prov ©   (2003-07-24 14:22) [2]

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


 
Prov ©   (2003-07-24 14:31) [3]

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


 
Anatoly Podgoretsky ©   (2003-07-24 14:51) [4]

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

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


 
Prov ©   (2003-07-24 14:57) [5]

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

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


 
clickmaker ©   (2003-07-24 15:50) [6]

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

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


 
Verg ©   (2003-07-24 16:37) [7]


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


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


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

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


 
Verg ©   (2003-07-26 17:15) [9]

var S : string;
....

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



 
Prov ©   (2003-07-28 09:25) [10]

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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.02 c
6-96324
Е-Моё имя
2003-07-28 11:43
2003.09.29
в TWebBrowser после открытия документа нужно иметь возможность ср


1-96160
flesh
2003-09-18 11:06
2003.09.29
CoInitialize has not been called в TXSLPageProducer.content


4-96498
Yuri Btr
2003-07-28 21:10
2003.09.29
Смена принтера по умолчанию


1-96256
Term
2003-09-18 11:31
2003.09.29
Поясните в чом проблема?


14-96368
Freeek
2003-09-11 18:01
2003.09.29
День рождение