
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
23.07.2018, 18:09
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
Пытаюсь рисовать в TScrollBox, а он в отместку выносит мне мозг :( Цель - статичные изображения, которые бы не меняли позицию при прокрутке. По логике делается очень просто - заливка фоном, отрисовка в фиксированном прямоугольнике. Однако не выходит - TScrollBox что-то очень хитрое творит с канвасом. Код: 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. 73. Такая картина после двух прокруток вниз и вправо Адрес, если вставка заглючит http://i105.fastpic.ru/big/2018/0723/1d/a9d305b87c1cd6ea55ae9da7c1d5991d.jpg А такая после рефреша и возврата на исходную позицию Помогите, плз. Совсем голову сломал уже. Перепробовал все варианты - добавление csCustomPaint, перекрытие DefaultHandler, с DoubleBuffered и без, перекрытие PaintWindow. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.07.2018, 18:16
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
Пока что нашел только один способ - первой строчкой в WMPaint поставить Invalidate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
23.07.2018, 18:42
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
А нужно добавить BeginPaint/EndPaint ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 09:28
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
_Vasilisk_, а код посмотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 11:42
|
|||
|---|---|---|---|
Отрисовка в TScrollBox |
|||
|
#18+
Login_not_secureПока что нашел только один способ - первой строчкой в WMPaint поставить Invalidate.Рукалицо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 12:13
|
|||
|---|---|---|---|
Отрисовка в TScrollBox |
|||
|
#18+
Invalidate в начале WMPaint приведет к повторному вызову WMPaint, в начале которого стоит Invalidate. Даю наводку в сторону того, как правильно делать: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 14:13
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
Login_not_secureа код посмотреть?Какой код? Вызов двух функций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 14:15
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
КвейдInvalidate в начале WMPaint приведет к повторному вызову WMPaint, в начале которого стоит Invalidate.Не приведет. Invalidate установит флаг, что окну нужно перерисоваться. А перерисуется оно, когда будет запущен оконный цикл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 15:37
|
|||
|---|---|---|---|
Отрисовка в TScrollBox |
|||
|
#18+
_Vasilisk_КвейдInvalidate в начале WMPaint приведет к повторному вызову WMPaint, в начале которого стоит Invalidate.Не приведет. Invalidate установит флаг, что окну нужно перерисоваться. А перерисуется оно, когда будет запущен оконный циклустанови Invalidate в код ТС, в начало авторского метода Paint, и посмотри что будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 15:38
|
|||
|---|---|---|---|
Отрисовка в TScrollBox |
|||
|
#18+
_Vasilisk_КвейдInvalidate в начале WMPaint приведет к повторному вызову WMPaint, в начале которого стоит Invalidate.Не приведет. Invalidate установит флаг, что окну нужно перерисоваться. А перерисуется оно, когда будет запущен оконный циклВсе верно, это у автора и приведет к повторному (бесконечному) вызову WMPaint ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 16:22
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
_Vasilisk_Login_not_secureа код посмотреть?Какой код? Вызов двух функций? Нет, это было предложение посмотреть код в первом посте. КвейдInvalidate в начале WMPaint приведет к повторному вызову WMPaint, в начале которого стоит Invalidate. Даю наводку в сторону того, как правильно делать: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Работает, спасибо (хотя я мог бы и сам догадаться). Всё же ушёл от Begin/EndPaint в WMPaint, т.к. это делает бессмысленным механизм двойного буферирования. Итоговый вариант: 1) в WMPaint добавляется csCustomPaint в ControlState, вызов метода предка, состояние удаляется 2) перекрытие PaintWindow 3) перекрытие сообщений скролла с вызовом Invalidate код для справки (добавил еще перемещаемый круг). Код: 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. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. Собственно, примерно таким способом и реализован TCustomControl (всё новое - не найденное в исходниках старое). Пока остановлюсь на таком варианте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 16:52
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
КвейдВсе верно, это у автора и приведет к повторному (бесконечному) вызову WMPaintЭто да. Но учитывая, что у WM_PAINT низкий приоритет, то оно еще и работать будет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
24.07.2018, 16:57
|
|||
|---|---|---|---|
|
|||
Отрисовка в TScrollBox |
|||
|
#18+
_Vasilisk_КвейдВсе верно, это у автора и приведет к повторному (бесконечному) вызову WMPaintЭто да. Но учитывая, что у WM_PAINT низкий приоритет, то оно еще и работать будет :) Именно так оно и работало, когда я поставил Invalidate в начале PaintWindow xD. WMPaint крутился постоянно, зато на вид все было ОК. Дополнение к коду выше: в методах WM*Scroll сначала Invalidate, потом inherited - убирает мелькания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=58&mobile=1&tid=2040594]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
147ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 440ms |

| 0 / 0 |
