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

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

Максимальное количество строк в Memo [D7, Win95/98, WinXP]


Страницы:   1 2

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 гб


Страницы:   1 2

Наверх

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