Предполагая, что ваш журнал имеет длину 1 000 000 строк, вы можете забыть использовать HTML или RTF, самое чистое решение (и я обрабатываю 100-1 000 000) - использовать (как предполагает mjustin) TListBox с
Style := lbVirtualOwnerDraw;
OnDrawItem := ListDrawItem; // your own function (example in help file)
- Определите свой массив данных в любом формате, который будет полезен для остальной части приложения. Я иду с простым LogObject.
- Храните все объекты LogObjects в ObjectList, каждый раз, когда есть изменения в списке (добавьте, удалите), настройте TListBox.Count, чтобы соответствовать новому счету ObjectList.
- Определите ListDrawItem самостоятельно, чтобы взять индекс, и вы можете получить информацию от вас ObjectList (база данных, что угодно ..) и проанализировать по требованию.
Поскольку вы будете просматривать только несколько записей за раз, подход «по требованию» значительно лучше, поскольку при загрузке нет «замедления» при попытке проанализировать все миллионы строк.
Не зная вашей реальной проблемы, я могу просто сказать, что по моему опыту это метод, который когда-то был изучен и освоен, полезен в большинстве приложений, ориентированных на данные.
Усовершенствования включают атташе управления заголовком над полем списка (я обертываю их вместе на панели), и вы можете создать превосходный контроль TListView. Прикрепите бит логики сортировки к событию click в элементе управления заголовком, и вы можете отсортировать список объектов, и все, что вам нужно сделать, это вызвать ListBox.Invalidate, чтобы обновить представление (когда это возможно).
Ity all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all Я делаю это в данный момент, чтобы вызвать событие таймера, чтобы настроить ListBox.Count, так как вы не хотите обновлять список 1000 раз в секунду .. :-)