Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  13:11[Войти] | [Зарегистрироваться]
Ответ на вопрос № 83658

13-05-2019 10:30
Здравствуйте!

Есть лог работы программы, который формируется в памяти в TStringList. Чем лучше его отобразить на экране? Желательно, чтобы была возможность это делать в оперативном режиме, во время работы программы добавлять туда текст. TMemo - можно, но, во-первых, редактирование изначально не нужно, и во-вторых, очень медленно он работает, если большой объем. Идеальное решение было бы наподобие терминала. Есть хардкорный вариант - рендерить текст самому на канве + скроллеры, но остаются вопросы по выделению текста и копированию его в буфер. Просто перед тем, как изобретать велосипед, подумал, что, возможно, такая задача уже была решена и решение известно многим, но не мне.

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

22-05-2019 14:41 | Комментарий к предыдущим ответам
To Python:
Для таких специальных целей как "скопировать кусочек текста", можно использовать буферный TMemo. Но не лепить его всплывающим, а пусть в диалоге появляется, или на той же форме, варианты есть. Отметить в листбоксе диапазон строк, скопировать в TMemo, а дальше использовать штатные средства.

22-05-2019 09:06 | Комментарий к предыдущим ответам
To Александр Малыгин:
Ну у меня та же штука с виртуальным листбоксом, только я не пользуюсь OnHint - он неудобен. Точнее как: он удобен для просмотра, но вот чтобы скопировать кусочек данных из лога - уже никак (приходится только полную строку). Я пытался сделать всплывающий TMemo (ну, не сам TMemo, он так не сможет, а именно виндовый компонент EDIT многострочный), чтобы можно было "залезть" в подсказку, скопировать отткуда кусочек по желанию штатными методами... но не получилось. Точнее как: получилось, но работало нестабильно: то не отображалось, когда надо, то напротив, не исчезло, когда надо. Понятно, что руки, но...

21-05-2019 14:18
Я использую для логов большого размера TListbox в виртуальном режиме, т.е. когда он не хранит данные, а получает строки из обработчика события onData.

Проблема длинных строк решается следующим образом: для строки, которая не помещается в поле вывода, при наведении курсора появляется хинт с полной строкой. Для этого на событие Application.OnShowHint вешается специальный обработчик, и эта фича работает для всех листбоксов в приложении (у которых ShowHint=true). Разные версии кода обработчика были опубликованы на этом сайте, например: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=762

21-05-2019 06:54 | Комментарий к предыдущим ответам
>>> Word Wrap важен.
Ну это же можно реализовать, если использовать строки в ListBox переменной высоты.

20-05-2019 08:02 | Сообщение от автора вопроса
Спасибо за ответы. Конечно, все приёмы работы с Мемо соблюдены. Кроме буферизированного вывода, это может улучшить. Физически обновление добавление делать по таймеру из буфера. Но опять же, нужно самому следить за наполнением, установить некий лимит, после которого очищать содержимое.
Виртуальный ListBox и ListView я рассматривал, но оно не подходит по своей идее из-за важности всего текста, который должен быть записан в логе, Word Wrap важен.

14-05-2019 12:49
Я для отображения логов пользуюсь виртуальным ListBox. Правда, я не рисую во много строк, то есть длинные строки обрезаются (для меня - некритично). В ListBox хранится только адрес структуры, где лежат два integer (по логике надо int64, но у меня физически лог обрезается до 10 Мб, так что 2Гб и выше просто не может быть), файл спроецирован полностью (если лог будет более 2Гб - то не спроецируете, придётся окошком бегать, да ещё заботиться о том, чтобы окошко перемещалось с гистерезисом, а то при малейшем движении туда-сюда будете несколько раз переставлять окошко) в память, оттуда дёргаю кусок, сразу разбираю и отображаю нужным цветом.
В отличии от Memo, данный метод МОЖЕТ дать выигрыш по памяти (Memo всё суёт в память, потому и работает быстро, для логов не очень хорошее решение).

14-05-2019 03:54
Вряд ли что-то быстрее TMemo получится. У него, кстати, есть свойство ReadOnly
Вывод нужно оптимизировать, посылая текст порциями, плюс TMemo.Lines.BeginUpdate()/EndUpdate()

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Зимой — белый, летом — серый. Кто?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

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

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования