Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
ВнизAnsiString Найти похожие ветки
← →
ford © (2009-08-24 13:59) [0]Здравствуйте!
подскажите пожалуйста,
есть Memo у которого есть строка (не одна) длиной более 1024 байт.
но в функцию почему-то, передается не более 1024байта
Function ClearSt(src:AnsiString):AnsiString;
Begin
...
result:=src;
end;
.....
for i:=0 to Memo1.Lines.Count-1 do
Begin
Memo1.Lines[i]:=ClearSt(Memo1.Lines[i])
End;
почему? ведь AnsiString это строка которая размещается динамически в куче и поидее ограничена тока размером оперативки
причем даже если сделать
Length(Memo1.Lines[i]), то на строке длиной 1378 байт функция возвращает 1024.
← →
Anatoly Podgoretsky © (2009-08-24 14:03) [1]> ford (24.08.2009 13:59:00) [0]
Это ограничение TMemo.Lines
← →
Сергей М. © (2009-08-24 14:03) [2]А что скрывается за многоточием ?
← →
ford © (2009-08-24 14:10) [3]
> А что скрывается за многоточием ?
не важно
в строке
Memo1.Lines[i]:=ClearSt(Memo1.Lines[i])
ставил length(Memo1.Lines[i]) и 1024 хотя там больше
> Anatoly Podgoretsky © (24.08.09 14:03) [1]
а как обойти не подскажешь??
← →
Сергей М. © (2009-08-24 14:13) [4]
> ford © (24.08.09 14:10) [3]
> не важно
Да что ты говоришь ?!)
Function ClearSt(src:AnsiString):AnsiString;
Begin
SetLength(src, 1024); // <- это вместо многоточия ты называешь "не важно" ?)
result:=src;
end;
> хотя там больше
"Там" это где ?
← →
Anatoly Podgoretsky © (2009-08-24 14:16) [5]> ford (24.08.2009 14:10:03) [3]
Не использовать МЕМО, авторы посчитали, что никто в здравом уме не захочет видеть более 1024 символа в одной строке.
← →
ford © (2009-08-24 14:17) [6]
> Сергей М. © (24.08.09 14:13) [4]
эту функцию можно вообще убрать
for i:=0 to Memo1.Lines.Count-1 do
Begin
Label1.Caption:=Label1.Caption+" "+IntToStr(Length(Memo1.Lines[i]));
Memo1.Lines[i]:=ClearSt(Memo1.Lines[i])
End;
так вот, в Label1 длина строк будет не больше 1024
> "Там" это где ?
в Memo1.Lines[1] например хранится строка более 1024
← →
ford © (2009-08-24 14:18) [7]
> Anatoly Podgoretsky © (24.08.09 14:16) [5]
шоб их этих авторов :)
придется переписывать всю функцию на Stream :((
← →
Anatoly Podgoretsky © (2009-08-24 14:23) [8]> ford (24.08.2009 14:18:07) [7]
Ты на кого плюешь, на Микрософт плюешь.
Хотя грех не плюнуть.
← →
Сергей М. © (2009-08-24 14:23) [9]
> ford © (24.08.09 14:17) [6]
> эту функцию можно вообще убрать
Зачем тогда упоминаешь ее ?
> в Memo1.Lines[1] например хранится строка более 1024
Не может она там храниться, не выдумывай.
Она там вообще не хранится.
И ограничение это не TMemo.Lines, а самой ОС.
Убедись сам:
showmessage(IntToStr(Length(memo.Lines[memo.Lines.Add(StringOfChar("X", 1025))])));
← →
Anatoly Podgoretsky © (2009-08-24 14:25) [10]Интересно зачем нужны строки такой длины в визуальном компоненте?
← →
Сергей М. © (2009-08-24 14:30) [11]
> зачем нужны строки такой длины в визуальном компоненте?
Это чтобы у юзера был повод поблагодарить автора за предоставленную возможность от души наелозится мышью по скроллбарам той самой мемы
← →
ford © (2009-08-24 14:30) [12]
> Anatoly Podgoretsky © (24.08.09 14:25) [10]
>
> Интересно зачем нужны строки такой длины в визуальном компоненте?
>
я загрузил в Мемо для отладки
RTF фалик применил к нему функцию,
посмотреть чего получиться
а в итоге столкнулся с такой вот бедой
← →
TIF © (2009-08-24 14:33) [13]> Ты на кого плюешь, на Микрософт плюешь.
> Хотя грех не плюнуть.
:)
Это системное ограничение, и правда винить нужно только Microsoft, хотя винить их не за что, правильно сделали, что запрет поставили :) Во всём нужна мера
Открываем блокнот, отключаем "Перенос по словам", впечатываем 1024 символа (то бишь ровно 1 Килобайт), а 1025 перенесётся на новую строку
← →
TIF © (2009-08-24 14:34) [14]> посмотреть чего получиться
> Открываем блокнот, отключаем "Перенос по словам", впечатываем 1024 символа (то бишь ровно 1 Килобайт),
>а 1025 перенесётся на новую строку
WordWrap нас спасёт?
← →
Leonid Troyanovsky © (2009-08-24 14:44) [15]
> Сергей М. © (24.08.09 14:23) [9]
> Убедись сам:
Для убеждения надо SendMessage(Memo1.Handle, EM_REPLACESEL,..)
И длину строки получать также EM_LINELENGTH.
> Anatoly Podgoretsky © (24.08.09 14:23) [8]
> Ты на кого плюешь, на Микрософт плюешь.
Любопытно, что для RICHEDIT макс длина строки 6143,
но и борланды внесли свою лепту - 4096.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2009-08-24 14:46) [16]> Leonid Troyanovsky (24.08.2009 14:44:15) [15]
RICHEDIT позже писался и они уже успели повстречаться с ненормальными.
← →
Сергей М. © (2009-08-24 14:46) [17]
> Leonid Troyanovsky © (24.08.09 14:44) [15]
> Для убеждения надо SendMessage
А это дом.задание автору - заглянуть в исходники TMemoStrings)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c