procedure TForm1.Button1Click(Sender: TObject); var S: String; begin // Это обычное TMemo на форме Memo1.Text := '1.jpg'#13#10 + '2.jpg'#13#10 + '3.jpg'; // И сам вопрос: S := Memo1.Lines[0]; // Здесь: S = '1.' - ??? (вместо '1.jpg') end;Нет никаких других потоков, стороннего вмешательства. Весь активный код - только в этих строчках. Не баг Delphi или системы. Версия Delphi значения не имеет. Вопрос на знание VCL.
Ответ на задачку будет выложен как обычно: примерно через месяц.
Ответ.
Delphi 2010
ОтветитьУдалитьЗадача не воспроизводится, S = '1.jpg' :(
:D
ОтветитьУдалитьРазумеется "просто так" она не воспроизводится. Если бы она воспроизводилась - понять, что происходит, было бы делом 5 минут в отладчике.
В этом и состоит задача.
Разделителем строк указана точка?
ОтветитьУдалить>>> Разделителем строк указана точка?
ОтветитьУдалитьНет. Если бы это было так, точка не попала бы в строку.
Перенос строк в TMemo может зависеть от ширины компонента.
ОтветитьУдалитьПри свойствах по умолчанию и ширине Memo1 в 18 пикселей у меня получился описанный эффект.
Ну свойство WordWrap (дословно "перенос слов") отвечает за это дело.
ОтветитьУдалитьПереносит строки по ширине
Делаем узкий TMemo и перенос пойдет автоматом
Получим столько символов в S, сколько влезет по ширине в строку
Ставим WordWrap в false и получаем S='1.jpg'
Предупреждать надо, что еще какие-то условия есть... а то я уже озадачился, как же такое может произойти. Соглашусь по поводу wordwrap.
ОтветитьУдалитьМожет, мне надо было прямо сказать, что WordWrap = True? :D
ОтветитьУдалитьВедь это default!
Да, получилась бы очень сложная задача - догадаться, что размер Memo надо уменьшить :)
это что, реально задача, или просто прикол такой, на тест трезвости после праздников?
ОтветитьУдалитьДа вас не поймёшь, в какую сторону тянуть надо...
ОтветитьУдалить>>> Перенос строк в TMemo может зависеть от ширины компонента.
ОтветитьУдалитьчто, простите? Размер компонента влияет на содержимое??
Уважаемый Torbins очевидно имел в виду, что
LineBreak = 'jpg'
или любой другой, начинающийся с 'jpg'
>>>что, простите? Размер компонента влияет на содержимое??
ОтветитьУдалитьПри Memo1.WordWrap:=true влияет!
Эх... хотел ответить, почитал комменты, а тут уже ответили... Ну тогда дополню чтоль.
ОтветитьУдалитьПри TMemo.WordWrap=True компонент при чтении из TMemo.Lines[index] возвращает именно текст строки которая визуально отображается в TMemo. Это реализована в TMemoStrings в исходниках VCL. Сами же данные при этом TMemo не меняет, и получить все эти данные в неизменном виде можно через TMemo.Text
p.s. Авторы компонента даже свойство назвали Lines, а не Strings как в TStringList, пытаясь подчеркнуть особенность поведения.