Количество строк memo delphi

Количество строк memo delphi

Это у меня глюк или действительно где то на 3500-3700 строках дальше в Мемо уже не добавляется??

А что делать что бы добавлялось? Перейти на РичЕдит?


Anatoly Podgoretsky © ( 2005-11-27 17:37 ) [1]


WebSQLNeeder © ( 2005-11-27 18:00 ) [2]

А если хочется что бы было именно мемо — то что больше там 3000 строк уже и нельзя делать??


Anatoly Podgoretsky © ( 2005-11-27 18:04 ) [3]

И хочется и колется и мама не велит.


WebSQLNeeder © ( 2005-11-27 18:52 ) [4]

Ладно, подойдем к этому вопросу по другому — какое максимальное количество строк возможно в Мемо? Искал в документации — не нашел .


begin. end © ( 2005-11-27 18:57 ) [5]

> WebSQLNeeder © (27.11.05 18:52) [4]

Для Win9x — 64 КБ текста максимум.


WebSQLNeeder © ( 2005-11-27 19:59 ) [6]

Хмм, а в Ричедите сколько? Мне нужно текст в сотни тысяч строк .


Anatoly Podgoretsky © ( 2005-11-27 20:08 ) [7]

WebSQLNeeder © (27.11.05 18:52) [4]
Нет такого ограничения, просто строками не оперирует.


Anatoly Podgoretsky © ( 2005-11-27 20:09 ) [8]

WebSQLNeeder © (27.11.05 19:59) [6]
RichEdit тоже строками не оперирует, только размер текста — 2 гб


sniknik © ( 2005-11-27 20:36 ) [9]

> . только размер текста — 2 гб
если явно не указать (MaxLength оставить 0) то останется ограничение в 64кб. уже "нарывался" на это.


упаковщик ( 2005-11-27 22:38 ) [10]

Удалено модератором
Примечание: Модератор сам решит, без тебя


Германн © ( 2005-11-28 02:54 ) [11]

1. упаковщика — отмодерить, что б впредь не повадно было столь явно демонстрировать "наглость"+"незнание".

2.
>sniknik © (27.11.05 20:36) [9]
>> . только размер текста — 2 гб
>если явно не указать (MaxLength оставить 0) то останется ограничение в >64кб. уже "нарывался" на это.

Это точно проверено?
Нет времени проверять это лично, но сегодня хочу отдать коллеге на проверку его программы некую свою, которая пишет в лог некие события, но и заодно выводит сообщения о них в РичЭдит.


упаковщик ( 2005-11-28 13:24 ) [12]


Palladin © ( 2005-11-28 13:35 ) [13]

Как там про гюльчетай было.


sniknik © ( 2005-11-28 14:33 ) [14]

Германн © (28.11.05 02:54) [11]
> Это точно проверено?
за все системы не скажу, проверял только на XP и 2000м/скомпиленное в D7, эффект был одинаков. но думаю, что это "особенность" ричэдита, распространяется не только на них.

а зачем ошибки в ричьедит, цветными делаеш? открывай в memo, он только от системы зависит 98/2000. а то еще лучше открывай свой лог виндовым блокнотом и все (такто он нафиг не нужен показывать, а если ошибки. то только чтобы не искать файл кнопочку сделать)

Читайте также:  Когда выйдет лефт фо дед 3


psa247 © ( 2005-11-28 14:45 ) [15]

У тебя должно быть что-то типа этого:

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;


Anatoly Podgoretsky © ( 2005-11-28 16:24 ) [16]

Германн © (28.11.05 02:54) [11]
Это точно, неисправленая ошибка с древних времен, точнее не соответсвие справки. 0 — означает 64 кб.


Германн © ( 2005-11-28 17:18 ) [17]

2 Anatoly Podgoretsky © (28.11.05 16:24) [16]

Странно. Посмотрел в Rx. Там эта ошибка исправлена, но только для Д3. .


SergP. ( 2005-11-28 17:32 ) [18]

Фаронов пишет что ограничение около 48 Кб. Сам точно не проверял. Но где-то так оно и есть. т.е. получается что реально немного меньше 64Кб. Но это в WIN98

В 2000/XP я на такое ограничение не нарывался. Только что попробовал загнать туда 200 Кб. работает. И строки можно дальше добавлять.


sniknik © ( 2005-11-28 18:11 ) [19]

> Только что попробовал загнать туда 200 Кб.
руками (копи/пасте)? или лоадфромфайл файл?

и куда в ричедит/Rxричедит/memo? уточняй. потому как memo зависит от системы, ричедит от разработчиков борланда а Rx-сы от их собственных разработчиков.


SergP. ( 2005-11-28 18:21 ) [20]


> руками (копи/пасте)? или лоадфромфайл файл?

и куда в ричедит/Rxричедит/memo?

Ну ведь сабж же про мемо.


SergP. ( 2005-11-28 18:28 ) [21]

// Проверка размера
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]
ограничение есть. Где-то приблизительно так как пишет Фаронов.


sniknik © ( 2005-11-28 20:11 ) [22]

SergP. (28.11.05 18:21) [20]
> Ну ведь сабж же про мемо.
а про ограничение говорилось у RichEdit-а см [8] — [9] и т.д. все со ссылками на него. для memo тоже говорилось [4] [5], ограничение в 98(и наверно и 95/милениуме) — 64кб, выше — 2гигабайта.


z007 ( 2005-11-28 23:36 ) [23]

> Мне нужно текст в сотни тысяч строк .
ПРАВИЛЬНЫЙ ОТВЕТ (для MEMO)
1. Определить буфер (pchar, stringlist) размером в число видимых строк при текущем размере memo (на погрешность можно добавить еще с десяток)
2. При изменении номера верхней видимой строки считать из файла (filestream"a, stream"a или stringlist"a — как пожелаете) нужное число строк и скинуть их в memo.

Снимаются ограничения по размеру текста,
скорость остается достаточно приемлемой.


sniknik © ( 2005-11-28 23:48 ) [24]

Читайте также:  Вреден ли роллтон для здоровья

z007 (28.11.05 23:36) [23]
> 1.
> 2.
практически свой DataSource только без базы и без грида. ;о))

только такой способ собьет форматирование текста, там же 1-а строка не равна 1й видимой в мемо. строка это абзац, зачастую из нескольких видимых строк, с переносом, может начинатся на одной странице заканчиваться на другой. да что там, одна строка может занимать два три а то и больше видимых экрана в мемо. попробуй разделить правильно.
придется оччень повозится. 😉


z007 ( 2005-11-30 00:12 ) [25]

sniknik © (28.11.05 23:48) [24]
>практически свой DataSource только без базы и без грида. ;о))

>придется оччень повозится

На самом деле не очень долго. Этот самый DataSource (вернее его часть — механизм чтения-записи в файл, чтения-обновления буфера) я делал (без VCL) 2 дня в свободное от работы время. Как только начал писать код, оказалось, что не все так сложно.
Буфер потому и должен содержать строки, что от начала строки легче подсчитать позицию.
Подозреваю, что в RichEdit Примерно также все устроено.


Defunct © ( 2005-11-30 05:46 ) [26]

z007 (30.11.05 00:12) [25]

т.е. по сути Вы реализовали для случая WordWrap=false, а с переносами как?


z007 ( 2005-12-06 23:28 ) [27]

Для Edit, кажется, есть возможность определять собственную функцию переноса. При расчете размера буфера, в который мы по кускам загружаем файл, воспроизводится эта процедура, за счет чего узнаем номер реальной строки (с #13#10) и "подстроку", которая будет первой видимой строкой в memo (он же multiline EditBox)

Вообще, действительно, у меня читались только строки целиком, однако, думаю, что и при включенном переносе их надо грузить из файла также. Ненужная часть загруженного текста остается невидимой как и в обычном EditBox"e, — здесь важно правильно спозиционировать Scrollbar — но при смене видимого текста в Edit"e немедленного обновления буфера с текстом не происходит, потому, что он имеет запас "сверху" и "снизу" в пару строк(реальных строк с #13#10).

У меня файл на диске обновлялся сразу (такая и задача была), но для общих случаев это, конечно, неправильно.

Он-лайн самоучитель Delphi

Использование компонента Memo

В некоторых случаях для ввода массива можно использовать компонент Memo. Компонент Memo позволяет вводить текст, состоящий из достаточно большого количества строк, поэтому его удобно использовать для ввода символьного массива. Компонент Memo добавляется в форму обычным образом. Значок компонента находится на вкладке Standard (рис. 5.4).

Рис. 5.4. Компонент Memo

В табл. 5.3 перечислены некоторые свойства компонента Memo.

Таблица 5.3. Свойства компонента Memo

Имя компонента. Используется в программе для доступа к свойствам компонента

Текст, находящийся в поле Memo. Рассматривается как единое целое

Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру

Читайте также:  Выпустить под залог это

Количество строк текста в поле Memo

Расстояние от левой границы поля до левой границы формы

Расстояние от верхней границы поля до верхней границы формы

Шрифт, используемый для отображения вводимого текста

Признак наследования свойств шрифта родительской формы

При использовании компонента Memo для ввода массива значение каждого элемента массива следует вводить в отдельной строке и после ввода каждого элемента массива нажимать клавишу .

Получить доступ к находящейся в поле Memo строке текста можно при помощи свойства Lines, указав в квадратных скобках номер нужной строки (строки нумеруются с нуля).

Следующая программа, текст которой приведен в листинге 5.5, демонстрирует использование компонента Memo для ввода символьного массива.

Основной цикл процедуры ввода символьного массива из компонента Memo может выглядеть так:

a [ i ]:= Memol.Lines[i];

  • SIZE — именованная константа, определяющая размер массива;
  • а — массив;
  • Memol — имя Memo-компонента;
  • Lines — свойство компонента Memo, представляющее собой массив, каждый элемент которого содержит одну строку находящегося в поле Memo текста.

Форма программы приведена на рис. 5.5. Помимо поля Memo она содержит командную кнопку (Buttonl), при щелчке на которой выполняется ввод значений элементов массива из поля Memo.

Рис. 5.5. Диалоговое окно приложения Ввод массива

Листинг 5.5. Ввод массива строк из компонента Memo

unit fr_memo_; interface

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, Menus, StdCtrls;

procedure ButtonlClick(Sender: TObject);

Компонент Delphi Memo являются окном редактирования многострочного текста который можно загружать из файла либо сохранять введенную информацию в файл текстового формата(рис 1).

В Memo формат текста (шрифт, выравнивание, цвет и т.д.) одинаков для всего текста и определены они в свойстве Font. Сохранены текст из Memo в файл не сохраняет элементы форматирования(шрифт, размер и т.п.) При последующем открытии этого файла, в Memo формат текста будет определяться текущим свойством Font компонента Memo, а не в том формате в котором был сохранен ранее.

Текст в Memo размещен построчно. Поэтому имеется доступ к строкам текста отдельно. Строки Memo являются объектами Lines[i] тип которого String, где i — номер строки, отчет начинается от нуля. Lines[i] доступен как для чтения, так и для записи. Поэтому текст в компоненте Memo есть возможность редактировать не только с помощью клавиатуры, но и программно. Например

Этим способом можно только редактировать текст, для добавления новой строки используются функции: Memo1.Lines.Add() добавляет новую строку в конец текста, а Memo1.Lines.Insert() вставляет новую строку перед указанной. Для удаление строк используется Memo1.Lines.Delete(i) где i — номер строки. Для определения количества строк используется функция Memo.Lines.Count. Рассмотрим процедуры для сохранения и загрузки текста:
Сохранение текста в файл осуществляется командой

Загрузка текста из файла осуществляется командой

Ссылка на основную публикацию
Ключ для word windows 10
Рано или поздно любой пользователь может столкнуться с проблемой поиска ключа Office. Конечно, если лицензия на него приобретена, то таких...
Калибровка монитора macbook pro
Сервисный центр MacPlus (ремонт Apple) раскрывает секреты калибровки дисплея iMac и Macbook Вы замечали, что одни и те же изображения...
Калькулятор градусов и минут сложение и вычитание
Калькулятор, поддерживающий основные арифметические действия над выражениями с градусами. Создан по запросу пользователя. Этот калькулятор выполняет арифметические действия над градусами....
Ключ для эксель 365 лицензионный ключ бесплатно
Еще несколько лет назад компаня Майкрософт планировала свой пакет продавать вместе уже с компьютерами, как сейчас происходит с операционной системой...
Adblock detector