![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте. Вкратце проблема описана в сабже. Версия Embarcadero Delphi XE 4.
Дано: Видимый Memo (TMemo), в который добавляется текст размером до 100 МБ из потока типа TStringStream. Проблема: Когда число строк в Memo становится больше 65000 (примерно; возможно, это SizeOf(Word) на деле), перестаёт работать ползунок горизонтальной прокрутки, а именно: ползунок активен, можно скроллить, но текст не двигается, причём клик на полосе прокрутки вне ползунка и кнопки скролла влево-вправо работают нормально. Встречались ли вы с такой проблемой с компонентом TMemo в этой или других версиях Delphi? Сейчас вот написал тест. Добавил 66000 строк. Прокрутка работает. Может, это как-то от размера текста зависит или от длины строк? Последний раз редактировалось Delphinaut, 28.01.2016 в 13:15. |
#2
|
|||
|
|||
![]() Провёл серию тестов.
Приложение портировалось со старой версии Delphi 7. Если создать новый пустой проект в Delphi XE 4, то проблем с количеством строк в Memo не возникает. Но в существующем проекте происходит следующее: горизонтальная прокрутка работает корректно, только пока в Memo не более 65534 строк. Как только строк становится 65535 или больше, прокрутка перестаёт работать. Кто-нибудь знает, из-за чего такое может происходить? |
#3
|
||||
|
||||
![]() Один я не могу понять зачем 100 метров текста грузить в мемо?
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#4
|
||||
|
||||
![]() нет, не один. тоже не могу понять зачем столько букв и кто их будет читать
![]() Пишу программы за еду. __________________ |
#5
|
|||
|
|||
![]() Обычно в Memo не более 100 строк, не более 500 символов каждая. Но это обычно. А может быть и 10000, и 100000. Содержимое Memo можно сохранить в файл. Не показывать же окошко "Извините, слишком много строк" и выводить только первые 65534 или предлагать сохранить строки сразу в файл на диске?
Что интересно, в "чистом" проекте горизонтальная прокрутка в Memo работает и при 100000, и при 200000 строк. В старом же проекте даже пробовал удалять Memo и создавать его заново. Без толку. Не могу понять, в чём причина. Memo - самый обычный, скроллинг тоже обычный. Может, в свойствах проекта какие-то ограничения прописаны? Последний раз редактировалось Delphinaut, 29.01.2016 в 12:10. |
#6
|
||||
|
||||
![]() TRichEdit возьми
![]() Пишу программы за еду. __________________ |
#7
|
|||
|
|||
![]() Всё! Нашёл, в чём причина
![]() Дело в том, что приложение использует манифест (Custom Manifest). Если в свойствах проекта указать Application - Runtime Themes - Enable Runtime Themes, то горизонтальная прокрутка работает, а если оставить Use custom manifest или просто None, то не работает. Баг? Последний раз редактировалось Delphinaut, 29.01.2016 в 12:44. |
#8
|
|||
|
|||
![]() Получается, в comctl32.dll версии ниже 6 ошибка (горизонтальная прокрутка Memo работает некорректно при количестве строк больше 65534)?
Или это ошибка в коде vcl.comctrls.pas? Кто-нибудь может проверить? |