![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Максимальное количество строк в Memo [D7, Win95/98, WinXP]
WebSQLNeeder © (2005-11-27 17:29:00)Это у меня глюк или действительно где то на 3500-3700 строках дальше в Мемо уже не добавляется??
А что делать что бы добавлялось? Перейти на РичЕдит?
z007 (2005-12-06 23:28:00) [1]Для Edit, кажется, есть возможность определять собственную функцию переноса. При расчете размера буфера, в который мы по кускам загружаем файл, воспроизводится эта процедура, за счет чего узнаем номер реальной строки (с #13#10) и "подстроку", которая будет первой видимой строкой в memo (он же multiline EditBox)
Вообще, действительно, у меня читались только строки целиком, однако, думаю, что и при включенном переносе их надо грузить из файла также. Ненужная часть загруженного текста остается невидимой как и в обычном EditBox'e, - здесь важно правильно спозиционировать Scrollbar - но при смене видимого текста в Edit'e немедленного обновления буфера с текстом не происходит, потому, что он имеет запас "сверху" и "снизу" в пару строк(реальных строк с #13#10).
У меня файл на диске обновлялся сразу (такая и задача была), но для общих случаев это, конечно, неправильно.
Defunct (2005-11-30 05:46:00) [2]z007 (30.11.05 00:12) [25]
т.е. по сути Вы реализовали для случая WordWrap=false, а с переносами как?
z007 (2005-11-30 00:12:00) [3]sniknik © (28.11.05 23:48) [24]
>практически свой DataSource только без базы и без грида. ;о))
Так и есть :)
>придется оччень повозится
На самом деле не очень долго. Этот самый DataSource (вернее его часть - механизм чтения-записи в файл, чтения-обновления буфера) я делал (без VCL) 2 дня в свободное от работы время. Как только начал писать код, оказалось, что не все так сложно.
Буфер потому и должен содержать строки, что от начала строки легче подсчитать позицию.
Подозреваю, что в RichEdit Примерно также все устроено.
sniknik (2005-11-28 23:48:00) [4]z007 (28.11.05 23:36) [23]
> 1...
> 2...
практически свой DataSource только без базы и без грида. ;о))
только такой способ собьет форматирование текста, там же 1-а строка не равна 1й видимой в мемо. строка это абзац, зачастую из нескольких видимых строк, с переносом, может начинатся на одной странице заканчиваться на другой. да что там, одна строка может занимать два три а то и больше видимых экрана в мемо. попробуй разделить правильно...
придется оччень повозится. ;)
z007 (2005-11-28 23:36:00) [5]> Мне нужно текст в сотни тысяч строк ...
ПРАВИЛЬНЫЙ ОТВЕТ (для MEMO)
1. Определить буфер (pchar, stringlist) размером в число видимых строк при текущем размере memo (на погрешность можно добавить еще с десяток)
2. При изменении номера верхней видимой строки считать из файла (filestream'a, stream'a или stringlist'a - как пожелаете) нужное число строк и скинуть их в memo.
Снимаются ограничения по размеру текста,
скорость остается достаточно приемлемой.
sniknik (2005-11-28 20:11:00) [6]SergP. (28.11.05 18:21) [20]
> Ну ведь сабж же про мемо...
а про ограничение говорилось у RichEdit-а см [8] - [9] и т.д. все со ссылками на него. для memo тоже говорилось [4] [5], ограничение в 98(и наверно и 95/милениуме) - 64кб, выше - 2гигабайта.
SergP. (2005-11-28 18:28:00) [7]
> sniknik © (28.11.05 18:11) [19]
// Проверка размера
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=inttostr(length(Memo1.Lines.Text));
end;
// Добавление строки
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.add('Добавляем строку');
end;
Вобщем сначала накопипастил чтобы получилось более 64 Кб,
а затем пробовал добавлять строки. Все отлично добавляется . Но только под 2000/XP
Под 9Х давно когда-то пробовал. Как и писал в
SergP. (28.11.05 17:32) [18]
ограничение есть. Где-то приблизительно так как пишет Фаронов...
SergP. (2005-11-28 18:21:00) [8]
> руками (копи/пасте)? или лоадфромфайл файл?
накопипастил.
и куда в ричедит/Rxричедит/memo?
Ну ведь сабж же про мемо....
sniknik (2005-11-28 18:11:00) [9]> Только что попробовал загнать туда 200 Кб.
руками (копи/пасте)? или лоадфромфайл файл?
и куда в ричедит/Rxричедит/memo? уточняй. потому как memo зависит от системы, ричедит от разработчиков борланда а Rx-сы от их собственных разработчиков.
SergP. (2005-11-28 17:32:00) [10]Фаронов пишет что ограничение около 48 Кб... Сам точно не проверял. Но где-то так оно и есть. т.е. получается что реально немного меньше 64Кб. Но это в WIN98
В 2000/XP я на такое ограничение не нарывался. Только что попробовал загнать туда 200 Кб. работает... И строки можно дальше добавлять...
Германн (2005-11-28 17:18:00) [11]2 Anatoly Podgoretsky © (28.11.05 16:24) [16]
Странно. Посмотрел в Rx. Там эта ошибка исправлена, но только для Д3. ???
Anatoly Podgoretsky (2005-11-28 16:24:00) [12]Германн © (28.11.05 02:54) [11]
Это точно, неисправленая ошибка с древних времен, точнее не соответсвие справки. 0 - означает 64 кб.
psa247 (2005-11-28 14:45:00) [13]У тебя должно быть что-то типа этого:
try
if FileExists(name)then begin
file_size:= Get_File_size(name);
if file_size <> -1 then Report.Perform(EM_LIMITTEXT, file_size, 0);
end;
Report.Lines.LoadFromFile(name);
except
Report.Lines.Add(SysErrorMessage(GetLastError));
end;
Где Report : TRichEdit;
sniknik (2005-11-28 14:33:00) [14]Германн © (28.11.05 02:54) [11]
> Это точно проверено?
за все системы не скажу, проверял только на XP и 2000м/скомпиленное в D7, эффект был одинаков. но думаю, что это "особенность" ричэдита, распространяется не только на них.
а зачем ошибки в ричьедит, цветными делаеш? открывай в memo, он только от системы зависит 98/2000. а то еще лучше открывай свой лог виндовым блокнотом и все (такто он нафиг не нужен показывать, а если ошибки... то только чтобы не искать файл кнопочку сделать)
Palladin (2005-11-28 13:35:00) [15]Как там про гюльчетай было....
упаковщик (2005-11-28 13:24:00) [16]Удалено модератором
Германн (2005-11-28 02:54:00) [17]1. упаковщика - отмодерить, что б впредь не повадно было столь явно демонстрировать "наглость"+"незнание".
2.
>sniknik © (27.11.05 20:36) [9]
>> ... только размер текста - 2 гб
>если явно не указать (MaxLength оставить 0) то останется ограничение в >64кб. уже "нарывался" на это.
Это точно проверено?
Нет времени проверять это лично, но сегодня хочу отдать коллеге на проверку его программы некую свою, которая пишет в лог некие события, но и заодно выводит сообщения о них в РичЭдит.
упаковщик (2005-11-27 22:38:00) [18]Удалено модератором
Примечание: Модератор сам решит, без тебя
sniknik (2005-11-27 20:36:00) [19]> ... только размер текста - 2 гб
если явно не указать (MaxLength оставить 0) то останется ограничение в 64кб. уже "нарывался" на это.
Anatoly Podgoretsky (2005-11-27 20:09:00) [20]WebSQLNeeder © (27.11.05 19:59) [6]
RichEdit тоже строками не оперирует, только размер текста - 2 гб