|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Друзья, кто нибудь делал такое: http://www.freepascal.ru/forum/viewtopic.php?f=44&t=7746&sid=ef6b81c47b1fe6b001bbc706a42111ac Только в Delphi? Крайне не хочется портировать lazarus вариант, так как зависимостей там сотни и по простому вряд ли получится. Может кто-то уже делал подобное в Delphi? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 22:21 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
На вскидку, начал бы искать в 2-ух направлениях: - какое-нибудь событие, получающее на вход, скажем, очередное слово из сканируемого документа и возвращающее атрибуты текста - либо, что лучше, возможность добавить зарезервированное слово, которое есть выделяемый текст ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2021, 22:29 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Тут скорее вопрос в том, есть ли что-то уже готовое и отлаженное. Сделать то велосипед можно, но займет немало времени, так как нужно чтобы работал на больших листингах и не тормозил приложение при постоянных щелчках по тексту туда-сюда. При этом адекватно работало обычное выделение. А это не "просто добавить кейворд" к сожалению. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 00:50 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
DelDelphi Тут скорее вопрос в том, есть ли что-то уже готовое и отлаженное. Сделать то велосипед можно, но займет немало времени, так как нужно чтобы работал на больших листингах и не тормозил приложение при постоянных щелчках по тексту туда-сюда. При этом адекватно работало обычное выделение. А это не "просто добавить кейворд" к сожалению. Готовое и отлаженное решение, не тормозит: https://delphihtmlcomponents.com/index.html Покрывает вашу задачу с легкостью на больших листингах, ну и много чего еще "из каропки". В вашем случае достаточно HTML Component Library, который стоит $349. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 01:01 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Две строчки кода: Код: pascal 1. 2.
Ниже результат - почтовый клиент на базе вышеупомянутого HTML Components (Bundle). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 01:13 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Точнее хотел сказать, что результат выполнения двух строчек кода представлен желтым выделенным фрагментом на скрине проекта. Вот :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 01:18 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Еще есть вариант подешевле - https://www.trichview.ru/features/trichview.html Не помню досконально, но вероятнее всего там тоже есть функция выделения повторяющегося фрагмента во всем тексте. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 01:38 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Softologic, К сожалению ваши варианты вообще не к месту, так как в продукте уже реализован SynEdit с кастомно написанными хайлайтерами под разные языки, поддерживаемые нашим продуктом. Плюс море кастомных плюшек типа CodeFolding. Задача стоит добавить подсветку выделенных кейвордов по всему листингу используя именно SynEdit. Смена компонента не рассматривается. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 01:43 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
DelDelphi Softologic, К сожалению ваши варианты вообще не к месту, так как в продукте уже реализован SynEdit с кастомно написанными хайлайтерами под разные языки, поддерживаемые нашим продуктом. Плюс море кастомных плюшек типа CodeFolding. Задача стоит добавить подсветку выделенных кейвордов по всему листингу используя именно SynEdit. Смена компонента не рассматривается. Ну ок, если так. Просто изначально было не понятно, что все только в пределах SynEdit ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 01:54 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
DelDelphi, пример ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 05:36 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Softologic Ну ок, если так. Просто изначально было не понятно, что все только в пределах SynEdit Я потому сразу ссылку на Lazarus форум дал, так как нужен аналог. Задача в листингах до пары мегабайт щелкать по опкодам и операндам и чтобы аналогичные подсвечивались по всему тексту. Тупой search и подсветка тут непокатят - повиснет все после тысячного найденного eax или ebx (как пример). Надеялся что есть что-то уже отлаженное нативное, которое следит за скроллом, кареткой, перемещениями по тексту и подсвечивает асинхронно блоками динамически. ma1tus, благодарю. Погляжу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 11:20 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
В SynEdit для подобных вещей существует спец. класс TSynEditPlugin С ним работать достаточно просто: 1. Определяем нужный тип Код: 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.
или Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
2. Главная процедура (привожу рабочий вариант) Код: 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. 95.
или (альтернативный, кода больше....) Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
3. Инициализация Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2021, 13:37 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
kapas, благодарю за ответ! К сожалению как вижу существует несколько форков SynEdit. Мой переработанный вариант основан на официальном sourceforge.net/projects/synedit/ (который мультиплатформенный под Delphi/Kylix). Пытался по простому интегрировать Ваш код в него - море всего не находит и в типах и в интерфейсе. Взять другой форк проблематично - так как много интегрировано собственных наработок в этот. Если есть время и желание - просьба подсказать пошагово сие внедрение. Увы без документации на интерфейсы SynEdit - равносильно это написать самому с нуля, чем внедрять то, что не внедряется. Заранее благодарю если возникнет желание помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2021, 18:27 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
DelDelphi, могу только более подробно прокомментировать код. Не сегодня... :-( 1. Сам работаю с версией https://github.com/SynEdit/SynEdit 2. Этом коде в основном все стандартное из TSynEdit. Отдельные функции можно дописать самому Успехов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2021, 07:15 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
DelDelphi, посмотрите примеры кода отсюда, это не оно? ( https://forum.lazarus.freepascal.org/index.php?topic=19424.0 ) в смысле, если по событию "выделение" определить, какая часть текста выделена и передать её в SynEdit.SetHighlightSearch(...) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2021, 15:51 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
не обязательно через search, не обязательно в плагине... отрисовкой только в видимых строках в его же обработчике; топорно, нативно, "на официальном" ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 03:06 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
ma1tus, Можно и так :-) Дело вкуса. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 07:33 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
kapas, ну да ) Привёл упрощенный. С т.з. декомпозиции плагин предпочтительней ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 14:08 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Кроик Семён, Это форум лазарус. Да, в нем все это сделано и работает. У меня как раз вопрос как это сделать в Delphi, не портируя горы лазарусовского кода. Задача усложняется тем, что нужна динамическая подсветка огромного числа кейвордов что под курсором где щелкнул пользователь. При этом листинги порой на пару мегабайт. В Lazarus реализовано с учетом этих вещей насколько я понял. То есть адаптивная подсветка по мере скролла (и также отмена подсветки старого кейворда), а не скопом всех мегабайт. Если реализовывать по простому - будет все жутко тормозить при щелчках пользователя с кейворда на кейворд, когда каждый встречается в листинге несколько сотен или тысяч раз (операнды и регистры ассемблера). А если начать щелкать быстрее - или повесит приложение или приведет к тормозам. Это не вариант. Пока к сожалению все что вижу из советов - либо не потянет эту задачу или требует несколько дней на на внедрение/адаптацию и тестирование, учитывая что мой форк основан на SynEdit 2016 года + был полностью адаптирован под юникод (для продукта критичен корректный показ строк из иероглифов, строк справа налево и так далее со всем функционалом SynEdit. К сожалению взять другой форк не получится - много своих продуктозависимых вещей добавлено и исправлено. Мерджить десятки файлов и переписывать сотню функций - тестирования и отладки на месяц. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 19:32 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
ma1tus, kapas, Вот это уже гораздо ближе, благодарю парни! Надо проверить на своей задаче. Отпишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 19:42 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
ma1tus, Благодарю! Именно то что искал! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2021, 19:50 |
|
SynEdit и подсветка текущего выделенного слова по документу
|
|||
---|---|---|---|
#18+
Я как-то имел опыт использования PaintTransient и ... Есть там ряд нюансов при рисовании. Например, надо следить чтобы не нарисовать на Gutter-e А при перемещении курсора по строкам это событие всегда вызывается и как следствие все эти выделенные куски мигают при перерисовке. Мелочь, но неприятно и это я так и не победил ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 21:43 |
|
|
start [/forum/topic.php?fid=58&msg=40108875&tid=2036850]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 146ms |
0 / 0 |