|
|
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
В общем реализовал у себя рисование многоуровневых заголовков... основу взял отсюда: НеОбычный TDBGrid . Вот основные процедуры рисования заголовков оттуда: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. То есть заголовок рисуется с индекса колонки и количество колонок, которые туда входят, в принципе все работает. Однако есть существенный недостаток... при горизонтальном скроллинге, когда часть таблицы уходит влево, объединенный заголовок перерисовывается заново и считает, что колонка от которой должен быть старт рисования прямоугольника всегда остается у края... никуда не смещаясь за границы экрана. В итоге визуально заголовок плывет и перемещается вместе со скроллом, "оставаясь" на месте и потом пытаясь "наползти" и перерисоваться в ячейках, где он вообще не должен быть. Заголовок должен уйти за пределы отображаемого грида. Не могу понять, как можно поправить, чтобы объединенный заголовок отрисовался нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2019, 07:45 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Ну... скорее всего вряд ли в этом коде, кто разбираться будет... ))) Для себя набросок как это сделать набросал... не знаю правда на сколько он грамотен. В идеале заголовки рисуются правильно только когда они все видны и на канве можно без проблем рисовать. Если начинаем скроллить, пошла каша... скроллинг в обычном гриде осуществляется скачками по одной колонке. Там где скролл переписан и плавный... такое конечно не пойдет. Соответственно можно узнать каких колонок нет, посчитать их ширину и указать TRect рисуемого прямоугольника в заголовке смещение на ширину отсутствующих колонок. Теперь вопрос... а как определить индекс первой, визуально видимой колонки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2019, 13:41 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Возьмите нормальный грид и не морочьте себе голову. Тот же ehlib. ДБГрид - полнейший отстой, который можно только выкинуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2019, 21:11 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
L_argoДБГрид - полнейший отстой, который можно только выкинуть. Почему же? На нем хорошо тренироваться, что выше упомянутая статья и показала. Может, ТС потом свой компонент напишет? зы. Кстати, ЭхЛиб грид изначально наследовался от дбгрида, лишь потом Большаков его заново от CustomControl переписал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2019, 21:25 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
L_argoВозьмите нормальный грид и не морочьте себе голову. Тот же ehlib. ДБГрид - полнейший отстой, который можно только выкинуть. +100, "стандартный" только для демок годится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2019, 22:39 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
в стандартном дбгриде есть всякие сложные заголовки. но нужен специально обученный датасет. в д5 есть демка alchtest.dpr ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2019, 08:29 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Большое спасибо конечно, но я не ставил вопрос, а какой грид обладает той или иной фичей... Я и так знаю... Меня интересует правильная реализация рисования компонентов самому. Зачем мне это нужно... оставим это мне ))) Инфы просто об этом нуль... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2019, 09:52 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Prot_XTИнфы просто об этом нуль...... или кто-то не умеет искать. Целые книги есть по созданию компонентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2019, 12:19 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
а вообще, это идеологически неправильно - рисовать в других ячейках. надо чтоб каждая из объединённых ячеек могла отрисовать на себе кусочек общей ячейки. тогда при скроллинге всё автоматом правильно нарисуется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2019, 13:24 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Мигалка , Уф... спасибо за мысль... а то я что-то в дебри полез. Хотел сдвиг вычислять и т.д. Короче обрабатываю исключительно ячейку, если визуально все ячейки входящие в блок видны, то рисую полный многоугольник (объединяю ячейки которые входят в блок), если часть ячеек уехала... выкидываю эту часть из большого многоугольника и рисую его на оставшихся частях... Все идеально работает! Теперь еще одна проблема осталась... текст в объединенной ячейке... Я его вписываю в прямоугольник: Код: pascal 1. Однако... ну он всегда тупо по центру... гы гы А надо то эмулировать, что он уезжает влево при скролле. Есть какие-нить мысли, что можно придумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 10:07 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Prot_XTчто можно придумать?А зачем ? Вы зря тратите время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 11:09 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
white_niggerЦелые книги есть по созданию компонентова какие кстати могли бы порекомендовать разработчики комплексных компонент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 11:19 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
L_argo , Уважаемый... Вы позволите мне самому решать, зря я трачу время или нет? Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 11:44 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
vavanа какие кстати могли бы порекомендовать разработчики комплексных компонент?По компонентам для начинающего любая книжка подойдёт. По графике GDI лучше Фень Юаня врятли что найдешь. А дальше уже смотря куда двигаться захочет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 12:01 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
L_argoВозьмите нормальный грид и не морочьте себе голову. +1 Стандартные компоненты из коробки - это прошлый век и разработчики их даже не пытаются улучшить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 12:13 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
X11Стандартные компоненты из коробки - это прошлый век и разработчики их даже не пытаются улучшить ага, скоро введут новую специальность: программист на devexpress. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 17:09 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
ДокX11Стандартные компоненты из коробки - это прошлый век и разработчики их даже не пытаются улучшить ага, скоро введут новую специальность: программист на devexpress. Ну ч0... в тему... прикольна ))) жги исч0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 18:04 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Prot_XTДокпропущено... ага, скоро введут новую специальность: программист на devexpress. Ну ч0... в тему... прикольна ))) жги исч0. Ну ты хоть объясни, ради чего эти прыжки и ужимки со "стандартным дбгрид". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2019, 22:00 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Да все, тему можно закрывать... в принципе не так уж и сложно все было. Все фунциклирует так как нужно... А я люблю, когда работает так, как нужно мне. Всем спасибо. ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.07.2019, 06:53 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
ёёёёёНу ты хоть объясни, ради чего эти прыжки и ужимки со "стандартным дбгрид". Во-первых, это интересно и отвлекает от рутины. Во-вторых, почему ужимки, если это работает и приносит пользу и удовлетворение от проделанного? В-третьих, всё что-то более-менее серьёзное стоит серьезных денег. В-четвертых, вот так по мелочи то одно подпилишь, то другое, и в целом получается достаточно много за 20 лет-то, и даже когда смотришь на навороченные компоненты за деньги, то понимаешь, что и там придется как-то подстраиваться, а что-то - непонятно как делать, а может и нет вовсе, и жуть как неохота всё у себя под это ломать. Что-то у меня не срослось в своем гриде с отрисовкой только в своей ячейки той части, которая требуется, как-то при горизонтальном скроллинге часть отрисовки то там, то сям терялась. Так что пока приходится залазить на соседние ячейки. Жутко стыдно, но работает, вроде. Надо собраться как-нибудь и поправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 02:19 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
V.BorzovЧто-то у меня не срослось в своем гриде с отрисовкой только в своей ячейки той части, которая требуется, как-то при горизонтальном скроллинге часть отрисовки то там, то сям терялась. Когда при скролле часть отрисовки "теряется то там то сям"... это означает, что прямоугольники рисуются неправильно. Они могут налазить друг на друга, пытаться друг друга перерисовать или вообще не отрисовываться и там или черный цвет будет или вообще не пойми что. Нужна отладка и понимание, что происходит. Я для этого делал отрисовку прямоугольников на форме и смотрел, что там вообще рисуется. Потому что в рамках рисования на отдельно взятой колонке трудно понять. Приведенная статья в начале поста всего лишь пример с чего я брал идею, там мало чего общего осталось. Но ключевая функция объединения заголовков Код: pascal 1. 2. присутствует и у меня. Она вычисляет Rect по любой колонке входящей в блок. В принципе при условии наследования от TCustomGrid с его вариантом скролла вполне хватает. Наверное если переделывать скролл, то наверное надо почти все самому рисовать, переписывать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 08:43 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
Prot_XT, Собственно, не знаю, что у меня там не получалось с отрисовкой, сейчас поправил как хотел, с использованием intersectcliprect, завернутым в savedc и restoredc, всё работает, никаких артефактов, недорисовок и наложений. Таким образом, когда рассчитываем заголовок, распространяющийся на несколько колонок, то рисуем его полностью на столько колонок, на сколько он распространяется, при обновлении данных по каждой колонке, хоть за край экрана, а фактически он будет прописан внутри области, выделенной под эту колонку. Ну, только на вертикальные линии внутри заголовка надо наложение не забыть сделать. Правда, тут я переписал вообще всю функцию paint, и линии в заголовках рисую не заранее, как в стандарте, а по мере отрисовки каждой ячейки, а не как в той статье... Кстати, если я правильно понял здесь про текст и скроллинг, то хочу отметить, что лучше выглядит, когда текст общего для ячеек заголовока, если его часть ушла за границы видимости, отрисовывается целиком в оставшейся видимой области, и центрировался по центру. Хотя это, может, дело вкуса уже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2019, 16:50 |
|
||
|
Многоуровневые заголовки TDBGrid
|
|||
|---|---|---|---|
|
#18+
V.BorzovProt_XT, Кстати, если я правильно понял здесь про текст и скроллинг, то хочу отметить, что лучше выглядит, когда текст общего для ячеек заголовока, если его часть ушла за границы видимости, отрисовывается целиком в оставшейся видимой области, и центрировался по центру. Хотя это, может, дело вкуса уже. Да... я это уже после понял... когда стал использовать в работе и заполнял огромную портянку с кучей разнообразных заголовков... порой сверху и не поймешь визуально что это, иной раз приходится туда-сюда дергать. А так действительно лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2019, 07:06 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=67&tid=2039238]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 291ms |

| 0 / 0 |
