Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.659 c
2-1251358261
parasolka
2009-08-27 11:31
2009.10.25
Выравнивание в DBGrid.


3-1228563453
Антон_207
2008-12-06 14:37
2009.10.25
курсовая


11-1206746346
kns
2008-03-29 02:19
2009.10.25
findcomponent


15-1250843051
@!!ex
2009-08-21 12:24
2009.10.25
Как получить историю посещения браузеров?


15-1250975984
Германн
2009-08-23 01:19
2009.10.25
Мини-опрос. Кому сколько ехать из дома до той конторы,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский