|
|
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Докпри достаточных ресурсах машины GTK-виджет работает нормально даже при выше приведенном коде Фигня это, если резко дёрнуть мышь, то она всё равно уйдёт из области контрола. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 13:33:03 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Док Код: pascal 1. 2. 3. 4. 5. 6. Любишь же ты всё переусложнять... :) Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 13:42:19 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
...ещё и mouseUp там не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 13:46:19 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey...ещё и mouseUp там не нужен. Да, ты прав. Теперь не нужен :) Поковырялся еще в коде, добавил "ограничители" мин/макс размеров. Код: 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. Пришлось добавить кода в OnResize формы Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Фризов, по-прежнему, не наблюдаю. Ну, или почти. Все-таки одновременно запущенные Screen2Gif и VMWare жрут ресурсы встроенной видюхи :) Правленный модуль с проектом приложил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 00:50:27 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокПоковырялся еще в коде, добавил "ограничители" мин/макс размеров. Ты пугаешь меня... Вместо использования стандартного свойства Constrains, городишь огород, который ещё и не работает (сходу смог уменьшить панель до 1 пикселя. хоть по вертикали, хоть по горизонтали) :) Ну и раз уж курсор меняется в mouseMove, то из mouseDown назначение курсора тоже можно убрать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 02:09:00 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Причесал чуть-чуть... Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 02:24:57 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyТы пугаешь меня... я сам себя пугаюсь иногда: то self пропущу, то constraints искаропки Рано мне еще в программисты ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 08:49:11 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Кстати, я правую и нижнюю границу не зря вручную ограничил. Там может лежать контролл или граница формы, за которую заходить не следует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 08:52:14 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокКстати, я правую и нижнюю границу не зря вручную ограничил. Там может лежать контролл или граница формы, за которую заходить не следует Ну так и это Constraints решает: Constraints.MaxWidth := Xmax - Panel.Left; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 10:27:08 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyНу так и это Constraints решает: Constraints.MaxWidth := Xmax - Panel.Left; хм, тоже верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2017, 10:34:42 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
кстати, добавил перерисовку панели при ресайзе Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. зы. MaxConstrX/Y оставил. имхо, код менее громоздкий и пользоваться удобнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 14:08:01 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Докзы. MaxConstrX/Y оставил. имхо, код менее громоздкий и пользоваться удобнее Это отсутствие кода более громоздкое чем вот эта вот лесенка? Если так уж хочется иметь свойство Max/MaxY, то можно таки вспомнить об ООП, в частности об инкапсуляции, и соордуить свойство с сеттером типа этого: Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 14:19:42 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Фиг его знает, тут подумать надо. Похоже, пока тестовое приложение напишу, из этой панельки полноценный компонент с разными фишками получится :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 16:22:57 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
ДокПохоже, пока тестовое приложение напишу, из этой панельки полноценный компонент с разными фишками получится :) Похоже, получилось. Заодно сделал двуязычным для пробы :). Кому интересно, исподники и демка в аттаче. Заодно, гляньте, плз, на линуксе. Че-та кнопка редактирования квадратной через раз отрисовывается (баг, какой-то, похоже). А также, если английские комменты в коде безграмотные, поправьте, плз. Буду благодарен. У меня грамматика хромает. "Оно хорошее, но почему-то хромает" © ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 00:48:35 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Док, Посмотрел на линуксе - вроде нормально кнопка отрисовывается. А нафига ты продублировал мышинные события и назначаешь имена создаваемым в рантайме компонентам? p.s. Ты меня там из копирайтов-то удали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 02:16:05 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyТы меня там из копирайтов-то удали. стыдно за компонент? Там половина твоих идей и их реализаций. Kazantsev AlexeyА нафига ты продублировал мышинные события и назначаешь имена создаваемым в рантайме компонентам? Я пока по-другому не умею ;) Все-таки всю жизнь другим занимался. Потом посмотрю, чего лишнее, доделаю-переделаю. Пока удовлетворяет текущим нуждам, буду писать основной проект дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 08:42:21 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeyнафига ты продублировал мышинные события и назначаешь имена создаваемым в рантайме компонентам? Вспомнил, осталось после отладки. Поправлю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 09:02:53 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
И еще вопрос: почему в русской версии капшены системного диалога здесь Код: 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. все остаются английскими? Винда же русская... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 09:11:05 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Док, Если ты про системный "MessageBox", то он использует локализацию винды для кнопок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 10:05:55 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
Доквсе остаются английскими? Винда же русская... Это не винда. Механизм аналогичный дельфовому: переводи ресурсы. https://stackoverflow.com/questions/35848393/lazarus-messagebox-how-to-localize-buttons ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 10:07:35 |
|
||
|
Как передать сендер в обработчик сообщений
|
|||
|---|---|---|---|
|
#18+
wadman, ага, везде так, просто не обращал раньше внимания. Нафиг, оставлю на потом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2017, 10:56:52 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2041541]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
100ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 391ms |

| 0 / 0 |
