|
|
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Пытаюсь поменять мышом размер панели в RT. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Отловить курсор в верхнем левом углу несложно (с помощью абсолютных координат) Код: pascal 1. 2. 3. 4. 5. 6. 7. 1. Как задать координаты правого нижнего угла (с помощью относ. координат)? 2. Как задать данный обработчик только для одного конкретного экземпляра этого класса (например, только для Panel2)? ================= Док. Win7 Ultim x64/Deb 9.1(GNOME, MATE; gtk2) i386: FB 3.0.2.32703, диалект 3, SS, Lazarus 1.9(r.56145); FPC 3.1.1 (r.36290), IBX by -Rik-; IBE 2017.4.19.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 09:14:36 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Док1. Как задать координаты правого нижнего угла (с помощью относ. координат)? Они уже заданы. Уточни вопрос. Док2. Как задать данный обработчик только для одного конкретного экземпляра этого класса (например, только для Panel2)? Добавь булево свойство, которое будет активировать обработчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 09:26:30 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
wadmanОни уже заданы. Уточни вопрос. как задать в обработчике координаты Rect(0,0,10,10) в нижнем правом углу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 09:42:50 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокwadmanОни уже заданы. Уточни вопрос. как задать в обработчике координаты Rect(0,0,10,10) в нижнем правом углу? Имеешь в виду Height-10 и Width-10? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 09:52:45 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокПытаюсь поменять мышом размер панели в RT. ... 2. Как задать данный обработчик только для одного конкретного экземпляра этого класса (например, только для Panel2)? Вот тут официальный пример от эмбы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 10:12:57 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Если вытащить самую суть: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 10:14:11 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
wadmanИмеешь в виду Height-10 и Width-10? да, мне нужны именно ширина/высота изменяемой панели. Хотел как-то феншуйно, типа Sender.Width, но придется, как обычно, через поля класса реализовывать :) alekcvpЕсли вытащить самую суть спасибо, попробую. Пока тупо повесил изменение булевой переменной на обработчики OnMouseEnter/OnMouseLeave ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 11:02:29 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Докспасибо, попробую. Пока тупо повесил изменение булевой переменной на обработчики OnMouseEnter/OnMouseLeave Наловишь кучу глюков, в случае когда фокус переключается на другое окно в то время как курсор над панелью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 11:18:13 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Докда, мне нужны именно ширина/высота изменяемой панели. Хотел как-то феншуйно, типа Sender.Width, но придется, как обычно, через поля класса реализовывать :) ControlAtPos поможет... alekcvpНаловишь кучу глюков, в случае когда фокус переключается на другое окно в то время как курсор над панелью. Это обрабатывается стандартно: по нажатию кнопки события от мыши грабятся и при отпускании кнопки - освобождаются. https://msdn.microsoft.com/en-us/library/windows/desktop/ms646262(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 11:23:48 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокwadmanИмеешь в виду Height-10 и Width-10? Хотел как-то феншуйно, типа Sender.Width, но придется, как обычно, через поля класса реализовывать :) У тебя же обработчик - метод класса-контрола, зачем тебе Sender когда там Self есть, он и будет Sender'ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 11:26:14 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
alekcvpзачем тебе Sender когда там Self есть, он и будет Sender'ом епрст, как же я мог про это забыть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 12:07:57 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Сделал так (для частного случая) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Теперь, как бы грамотно проконтролировать, чтобы панельку нельзя было растянуть ниже и правее лежащих компонентов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:01:54 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокТеперь, как бы грамотно проконтролировать, чтобы панельку нельзя было растянуть ниже и правее лежащих компонентов? wadmanControlAtPos поможет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:07:20 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокТеперь, как бы грамотно проконтролировать, чтобы панельку нельзя было растянуть ниже и правее лежащих компонентов? ИМХО: определить какие конкретно компоненты ограничивают её размер и при ресайзе проверять что Left + Width панели < Left того компонента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:32:51 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокСделал так (для частного случая) Код: pascal 1. [/spoiler] Раз уж всё равно наследуешь, то сделай новое свойство: Sizeable: Boolean и выставляй/проверяй его, чем такие извращения. А если ты завтра панельку переименуешь?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 14:34:48 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
alekcvpДокСделал так (для частного случая) Код: pascal 1. [/spoiler] Раз уж всё равно наследуешь, то сделай новое свойство: Sizeable: Boolean и выставляй/проверяй его, чем такие извращения. А если ты завтра панельку переименуешь?.. где там наследник? хак за который надо чтонть отрывать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 15:08:05 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Tactical Nuclear Penguinгде там наследник? хак за который надо чтонть отрывать... Нормальный хак, сначала на нём всё что нужно отлаживаешь, потом в отдельный компонент переносишь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 15:09:53 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
alekcvpРаз уж всё равно наследуешь, то сделай новое свойство: Sizeable хотел было отказаться от него, но с учетом последнего условия, видимо, придется менять этот флаг в OnMouseDown/OnMouseUp панельки. Там же и координаты "ограничивающего" компонента задавать. Tactical Nuclear Penguinхак за который надо чтонть отрывать... это лазарь, там штатными средствами, имхо, немногого можно добиться. Надеюсь, что хак некритичный и без подводных камней. Щас на винде запилю, потом в в линуксе попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 17:34:26 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
alekcvpпотом в отдельный компонент переносишь :) ага, этот следующий после своего аналога RaizePageControl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2017, 17:37:39 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Резюмирую свои мучения. Поскольку проект Лазаревый, то виндовое АПИ так и не удалось запустить под Линукс, ибо нету в сорцах под никсы некоторых констант (HTBOTTOMRIGHT и его родственников). Потому пришлось идти обходным путем. Чтобы уж совсем по феншую было, написал наследника в отдельном юните (слизал отсюдова ). Единственное, переписал Paint, чтобы grip size hbcjdfkcz уж наверняка и не зависел от наличия в системе шрифтов Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. В результате получил нужное. Единственное, картинка лагает на линуксе. Но это вероятно, из-за слабенькой видеокарты (если у кого линь основной ОСью, проверьте, плз, - сорцы приложил) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 15:51:41 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокНо это вероятно, из-за слабенькой видеокарты Это не из-за видеокарты, и вообще не лаги. Это просто не работает захват мыши. Кстати, т.к. у панели по дефолту включен стиль csCaptureMouse, то самостоятельно захватом рулить не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 16:47:05 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЭто не из-за видеокарты, и вообще не лаги. Это просто не работает захват мыши. Можешь поподробнее? Где и что в системе посмотреть? Подобная хр@нь иногда наблюдалась в gnome classic на debian 7, когда пытался ресайзить какое-либо окно. Сейчас все линуксы стоят в виртуалке, на убунте еще не смотрел. Кстати, если не трудно, погляди проект у себя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2017, 21:07:37 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокГде и что в системе посмотреть? Это не системная проблема, это "особенности" работы GTK-виджетсета. В общем, когда ты после захвата мыши меняешь экранный курсор, то сообщения мыши начинают приходить в обычном режиме (т.е. в контрол над которым находится курсор). Решается назначением курсора контролу. Кстати, можешь оформить баг-репорт и посмотреть, как скоро его закроют ;) Пример, где ресайз делается сильно проще :) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 00:49:15 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyGTK-виджетсета лазарусовского GTK-виджетсета ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 00:52:20 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyлазарусовского GTK-виджетсета Да ты просто волшебник :) Немного поправил твой код (курсор crSizeNWSE при наведении не отображался) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Тормоза пропали Кстати, народ писал , что при достаточных ресурсах машины GTK-виджет работает нормально даже при выше приведенном коде. В любом случае, спасибо за помощь и пояснения зы. для идущих следом модуль приложил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 13:21:27 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39548658&tid=2041541]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 530ms |

| 0 / 0 |
