|
|
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Добрый день! Все вы видели как CnPack выделяет линиями блоки begin и end. Кроме того они не обязательно могут находиться друг под другом и к тому же иметь "вложенные" блоки. Кто-нибудь пытался реализовать подобное? Мой код: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:01 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
ещё немного, ещо чу-чють и ты на пишешь SynEdit Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:04 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
// Поиск слова BEGIN, начиная от верхней видимой линии А что BEGIN не может быть выше ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:12 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
DimaBr, конечно может... Предлагаете выполнять поиск, начиная с первой строки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:17 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Кроме того, при добавлении новой пары: begin - end будет увеличено количество строк и прийдется все пересчитывать, либо вешать подобную процедуру на событие OnChange. А как быть с вертикальной плохой прокрутки?, ведь даже если не прибавлять строки, следует сделать полную перерисовку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:25 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Есть идеи? Или написать базу данных легче, чем рисовать в Memo ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:28 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
18.09.2019 15:28, Linux_64 пишет: > Есть идеи? Или написать базу данных легче, чем рисовать в Memo ? Вы рисуйте, вы рисуйте, вам зачтётся, Что гадать нам удалось, не удалось. Ничего, что мы чужие, вы рисуйте, Я потом, что непонятно, объясню. (C) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:33 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Да ладно вам, конечно зачтется. Я вот подумал, если завести ещё 4 переменных, тогда можно пройтись циклом снова и найти вторую пару begin - end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:44 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64Я вот подумал, если завести ещё 4 переменных, тогда можно пройтись циклом снова и найти вторую пару begin - end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:47 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
А если я напишу Abegin ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:48 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Возможно это сработает, и у меня будет две линии на две пары, но как сделать привязку, чтобы "свой" begin соответствовал "своему" end и линия прорисовывалась правильно, включая внутренние конструкции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:49 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
DimaBr, но ведь ABegin не является ключевым словом, поэтому линия в этом случае не должна прорисовываться по-умолчанию, но стоит только убрать первую букву А и все работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:55 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
а строковые литералы? а комментарии? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:56 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
не должна, но у вас то рисуется !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 15:56 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64Есть идеи? Или написать базу данных легче, чем рисовать в Memo ? все велосипеды уже написаны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:03 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
DimaBr, вы правы, рисуется даже если написать sssBeginzzz... Хм, в этом случае следует найденное слово проверять по длинне, что бы исключить "мусор" А вот на счёт комментариев и прочих литералов, это вообще загадка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:03 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64по длинне Не по длине, а на наличие разделителей до и после. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:07 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
18.09.2019 16:07, wadman пишет: > Не по длине, а на наличие разделителей до и после. зонудо! (С) Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:10 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Док, зачем мне SynEdit ? Когда мы уже научимся писать что-нибудь сами и не копировать это у америкосов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:17 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
18.09.2019 16:17, Linux_64 пишет: > Когда мы уже научимся писать да. нам тоже интересно. когда ж вы уже наконец научитесь писать?! Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:24 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
По-поводу наличия пробелов до и после, идея хорошая. Можно попробовать сделать строгое соответствие слова, включая пробелы по-бокам, хотя опять таки слово может начинаться сразу в начале строки без пробела. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:29 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
А если я явно укажу, что мне нужно найти строгое соответствие слова, это исключит "мусор" типа aBegin или begin9 или begin_22 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 16:59 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Так, если указать дополнительное условие поиска слова, мы исключаем лишний мусор. Линия прорисовывается, причём строго вертикально, независимо от того, был ли сдвинут end в сторону или нет. Кроме того, зная где заканчивается линия, мы можем дорисовать горизонтальную линию до слова end с захватом +1 символ "e". При прокрутке текста, вертикальной полосой, линия перерисовывается, но если begin ушёл вверх за видимую часть строк в редакторе, то и сама линия начинается из ниоткуда. Кроме того, мне не очень нравиться эта конструкция: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 18:08 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
В любом случае, одна пара уже выделяется, даже при прокрутке строк, ещё немного потестирую. Но как быть с внутренними блоками? Прибавлять по 4 переменных на каждую пару? Может завести массив из integer, вычислить общее количество одних слов и общее других? А ещё наверное добавить в условие поиска знаки комментариев // и {} для исключения из поиска тех слов, которые находятся внутри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 18:15 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64В любом случае, одна пара уже выделяется, даже при прокрутке строк, ещё немного потестирую. Но как быть с внутренними блоками? Прибавлять по 4 переменных на каждую пару?... Да, конечно. Так будет красиво. Но ведь может быть и так: Код: pascal 1. 2. 3. 4. ...в любом случае, вложенность блоков не может быть глубже шестнадцати. 16*4 = 64 переменных. Фигня, зато код красивый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 18:19 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Вот результат. Но что если вложенных конструкций будет более, чем две? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:01 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64Но что если вложенных конструкций будет более, чем две? Еще пару уровней добавь. Ну кто в здравом уме станет больше пяти уровней вложенности делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:06 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64, не забудь ещё про вот эти блоки: Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:08 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
ёёёёё, Точно. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:09 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64, а вот так - сработает? Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:10 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64, А что будет в таком случае: Код: pascal 1. 2. 3. 4. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:20 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64, а тут - что будет? Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:21 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64, а фолдинг (сворачивание) ты тоже будешь ручками делать? Смотри, как SynEdit умеет: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:27 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
ёёёёё, нет. Он часть горизонтальной линии вообще не рисует, а возле буквы b рисует кусок вертикальной. Блин, да какой SynEdit? - редактор на три тысячи строк и плюс в добавок вагон дополнительных модулей для разных наворотов, а мне нужна всего одна рабочая процедура ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:33 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
ёёёёё, а во втором случае вообще ничего не рисует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:34 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64ёёёёё, нет. Он часть горизонтальной линии вообще не рисует, а возле буквы b рисует кусок вертикальной. Блин, да какой SynEdit? - редактор на три тысячи строк и плюс в добавок вагон дополнительных модулей для разных наворотов, а мне нужна всего одна рабочая процедура Ну что ж ты за жопа такая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:46 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64...Блин, да какой SynEdit? - редактор на три тысячи строк и плюс в добавок вагон дополнительных модулей для разных наворотов, а мне нужна всего одна рабочая процедура Какая-то мохнорылая, колхозная дичь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 19:48 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Судя по скрину в SynEdit, то он рисует это на жёлобе, а не на самом редакторе. Я понимаю, что он многое умеет. Вы читали сколько человек приняли участие в его разработке?, не менее пяти, к тому же ещё и профи. И снова эти америкосы.... Как же мы любим им подражать и использовать всё готовое.... Сам факт того, что в Мемо всё же можна рисовать,- это доказано. Только нарушена сама логика программы, неверный алгоритм поиска. Что ж, эксперименты продолжаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 20:19 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64Судя по скрину в SynEdit, то он рисует это на жёлобе, а не на самом редакторе... Но жёлобе? А это тебе что - тоже жёлоб или все же сосиска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 20:57 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Ну и логичный вопрос, это тоже будет отрисовываться ? Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2019, 23:41 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
DimaBr, Ты главное еще дефайны не вспоминай. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2019, 00:45 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Linux_64И снова эти америкосы.... Как же мы любим им подражать и использовать всё готовое.... Сказал чел, пишущий на америкосской среде под америкосскую ОС )))) Как думаете, пациент скоро дозреет до парсера или продолжит колхозить с Pos-ами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2019, 11:54 |
|
||
|
Выделение блоков begin - end в Memo
|
|||
|---|---|---|---|
|
#18+
Василий 2пациент скоро дозреет до парсера Если для него "на 80% готовая среда" это TMemo, то он не дозреет никогда. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2019, 12:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2039034]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
92ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 485ms |

| 0 / 0 |
