Как нарисовать HTML Table средствами Delphi
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Суть задачи такова: дана таблица в HTML формате, например
[html]
<table>
<tr>
<td rowspan=2>Ячейка 1</td><td>Ячейка 2</td>
</tr>
<tr>
<td>Ячейка 3</td>
</tr>
</table>
[/html]
нужно её нарисовать.
Хотелось бы услышать хороший совет, как это оптимальнее всего сделать (количество строк может быть очень большим).
Стили, форматирование ячеек пока не имеет значение, хотя интересно было бы знать как лучше отрисовывать границы ячеек имеющие разное оформление (толщина, цвет и т.д.)
[html]
<table>
<tr>
<td rowspan=2>Ячейка 1</td><td>Ячейка 2</td>
</tr>
<tr>
<td>Ячейка 3</td>
</tr>
</table>
[/html]
нужно её нарисовать.
Хотелось бы услышать хороший совет, как это оптимальнее всего сделать (количество строк может быть очень большим).
Стили, форматирование ячеек пока не имеет значение, хотя интересно было бы знать как лучше отрисовывать границы ячеек имеющие разное оформление (толщина, цвет и т.д.)
Нарисовать где, на чем? Прямо на канве формы, в Мемо с помощью псевдографики, в StringGrid?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
а не проще передать её на отображение браузеру?
С уважением, Lost Angel...
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Поставь Webbrowser
и ему загоняй
Будет свой ослик 6))
и ему загоняй
Будет свой ослик 6))
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Нет не проще, потому как в дальнейшем предполагается добавить некую интерактивность при просмотре изображения. Можно конечно интерактивность добавить и в браузере но это будет через одно место.
Я раньше работал напрямую с браузером (как компонентой), мне идея не очень понравилась, и под текущую задачу это совершенно не подходит.
Я раньше работал напрямую с браузером (как компонентой), мне идея не очень понравилась, и под текущую задачу это совершенно не подходит.
Ну тогда надо писать парсер" писал(а):Нет не проще...

С уважением, Lost Angel...
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
если уж
то выводить её всёже разумнее компонентом заточенным под HTML. Зачем велосипед изобретать? "Не понятно" (с)" писал(а):дана таблица в HTML формате

- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Наверно я не правильно объясняю, мне не нужно заниматься разбором html кода, я это уже умею (на крайний случай это можно представить как XML и разбирать xml parser'ом), задача в другом - нарисовать эту таблицу, ячейку за ячейкой, учитывая объединения этих ячеек, ну например можно было бы создать компонент на основе TStringGrid, и отрисовывать её с учётом информации заданной в HTML коде.
Трудность для меня в следующем: я не хочу перерисовывать таблицу каждый раз с начала и до конца (если таблица будет большой - будет много тормозов
, а я хочу отрисовывать только те ячейки которые видны на данный момент времени, и ещё нужно учитывать что в видимую часть будут попадать части ячеек которые находятся далеко вверху или далеко в стороне (для случая ячеек с признаком colspan или rowspan). В принципе определение этих ячеек можно организовать путём сканирования таблицы при каждой её отрисовке, определением видимых ячеек и уже отрисовывать только их, но если таблица большая, то сканирование всей таблицы при каждом перерисовывании повлечет за собой также большие задержки. Вот меня и интересует проблема оптимального рисования большой таблицы с наличием объединённых ячеек.
Подобные гридины я уже рисовал и раньше, но все они сводились к аналогу TStringGrid, а это не самое удачное решение. Например для таблиц с большой разрежённостью данных это будет лишней тратой памяти (TStringGrid выделяет память под каждую строку, даже если там ничего нет).
Если для примера взять электронные таблицы, то мы можем ввести значение в начале таблицы и в конце таблицы (где-то за 10000 строк), а по середине пусто, то памяти такая таблица будет "жрать" столько-же сколько и при наличии всего двух строк в начале.
Моя цель создать компоненту схожую по функциональности с электронной таблицей, а HTML код я привёл для примера, думая что так будет понятнее, но похоже только больше запутал людей.
Трудность для меня в следующем: я не хочу перерисовывать таблицу каждый раз с начала и до конца (если таблица будет большой - будет много тормозов

Подобные гридины я уже рисовал и раньше, но все они сводились к аналогу TStringGrid, а это не самое удачное решение. Например для таблиц с большой разрежённостью данных это будет лишней тратой памяти (TStringGrid выделяет память под каждую строку, даже если там ничего нет).
Если для примера взять электронные таблицы, то мы можем ввести значение в начале таблицы и в конце таблицы (где-то за 10000 строк), а по середине пусто, то памяти такая таблица будет "жрать" столько-же сколько и при наличии всего двух строк в начале.
Моя цель создать компоненту схожую по функциональности с электронной таблицей, а HTML код я привёл для примера, думая что так будет понятнее, но похоже только больше запутал людей.
- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
И ещё, если у вас есть компоненты для Delphi (open source), которые как раз и делают то о чем я спрашиваю, то если не сложно скиньте на них ссылку. Только прежде чем создавать эту тему я перерыл весь инет в поисках подобно штуки и ничего похожего не нашёл (а может я искать не умею?)