Главная страница
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.021 c
3-96081
AlexMan
2003-09-10 07:46
2003.09.29
IBServer under W98


1-96240
vlv
2003-09-17 16:28
2003.09.29
Можно ли с помощью TRegistry работать с удаленным реестром?


3-96097
DelphiNew
2003-09-09 15:48
2003.09.29
Sql сервер


14-96418
LiLa Ananda
2003-09-06 10:17
2003.09.29
---|Ветка была без названия|---


6-96329
acsoft
2003-07-30 07:20
2003.09.29
Cookie