|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
Ограничить выделение в StringGrid-e30.01.2020, 07:06. Показов 4814. Ответов 46
Добрый день!
В Delphi имеется таблица StringGrid1 (20х20), по умолчанию выделять мышкой можно неограниченное количество ячеек, но как сделать так, чтоб при выделении мышкой не выделялись столбцы меньше 5 и больше 15, даже если нажатая левая кнопка мыши находилась за пределами выделения?
0
|
|
| 30.01.2020, 07:06 | |
|
Ответы с готовыми решениями:
46
|
|
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||
| 05.02.2020, 11:17 | ||
|
qwertehok, выложите исходники своего проекта, пожалуйста.
0
|
||
|
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||||||||
| 05.02.2020, 12:06 | ||||||||
![]() я взял стрингрид, на событие onSelectCell добавил обработчик вида:
0
|
||||||||
|
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||
| 05.02.2020, 15:07 | ||
|
Или в вашем проекте был точно такой же код? Только он работал? Добавлено через 4 минуты мне то это самое выделение и даром не нужно, но раз возник вопрос, то любопытно разобраться. да, если надо, могу откомпилированный EXE выложить. Чтобы можно было убедиться, что запрет CanSelect := False в onSelectCell не запрещает выделять в гриде мышкой.
0
|
||
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
||||||
| 06.02.2020, 06:15 [ТС] | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 06:18 [ТС] | |
|
Вот проект с программой
StringGrid1.zip
0
|
|
|
Модератор
4152 / 2361 / 814
Регистрация: 15.11.2015
Сообщений: 9,494
|
|
| 06.02.2020, 09:20 | |
|
0
|
|
|
Модератор
4152 / 2361 / 814
Регистрация: 15.11.2015
Сообщений: 9,494
|
||||||
| 06.02.2020, 09:34 | ||||||
|
Сделал лог событий - OnSelectCell возникает один раз при нажатии мыши и потом, пока двигаешь выделение оно больше не наступает. Поэтому и не подходит для данной задачи.
Добавлено через 7 минут darknez1, как тебе вот такое частичное решение? В процессе выделения можно выделить всё, что хочется, а по окончании область исправляется, чтобы попасть в разрешённую:
0
|
||||||
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 09:47 [ТС] | |
|
Дело в том что у меня есть таблица StringGrid, когда я выделяю мышкой т.е. веду по форме. В Label1 у меня отображается сколько и какие ячейки я выбрал номера и количество, часть столбцов в StingGride имеет ширину -1, т.е. они не отображаются, но если двигать мышкой с выдимых на невидимые (выделять их), то они суммируются хотя их не видно. В случае если бы я запретил выделять дальше ( например 15 столбца) то скрытые ячейки не суммировались бы, я проставил бы границы выделения и это решило бы массу вопросов.
Можешь сам попробывать у StringGrida поставь 10 ячеек ширина 30, а другие 10 ширина -1. При выделении мыши на StringGride, в Label1 выводится текущий адрес ячейки, и если начать выделять с видимых на невидимые, то он продолжит менять адрес, хотя ячеек то не видать и сетка закончилась. А вот насчёт того кода с частичным решением: У меня Rad Studio 10.3.3 выделялось не вся область, позже запишу видео и скину, как оно у меня выделялось
0
|
|
|
Модератор
4152 / 2361 / 814
Регистрация: 15.11.2015
Сообщений: 9,494
|
||
| 06.02.2020, 09:56 | ||
|
Добавлено через 1 минуту Надо ковырять исходники StringGrid, ведь, он сам ограничивает выделение фиксированных строк и столбцов, они вообще не выделяются. Значит, это возможно в принципе.
0
|
||
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 09:57 [ТС] | |
|
Это как вариант, и там много ошибок, я его бы и не применил в основную программу, но направление мыслям задал
0
|
|
|
Модератор
4152 / 2361 / 814
Регистрация: 15.11.2015
Сообщений: 9,494
|
|
| 06.02.2020, 11:20 | |
|
Попробовал перекрыть выделение мышкой, если выделение начинается внутри разрешённой области и не выходит за пределы ячеек в гриде, то работает нормально. Но как только мышь выходит за пределы ячеек вообще, то начинается неконтроллируемое выделение ячеек.
Добавлено через 47 минут darknez1, а как должно работать, если щёлкнули вне разрешённой области выделения?
0
|
|
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 11:22 [ТС] | |
|
Ничего не должно происходить
0
|
|
|
Модератор
4152 / 2361 / 814
Регистрация: 15.11.2015
Сообщений: 9,494
|
|
| 06.02.2020, 11:30 | |
|
Всё, решил. Есть 2 варианта:
1. Если щёлкнули и начали выделать в разрешённой области, то можно выделять только в её пределах. Если щёлкнули вне разрешённой области, то просто курсор перемещается туда и всё, ничего не выделяется. 2. Независимо по какой ячейке щёлкнули, курсор перемещается в разрешённую область и можно выделять только в её пределах.
0
|
|
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 11:32 [ТС] | |
|
Спасибо AzAtom, а код имеется? И какой подход использовал?
0
|
|
|
Модератор
4152 / 2361 / 814
Регистрация: 15.11.2015
Сообщений: 9,494
|
||||||
| 06.02.2020, 12:28 | ||||||
Сообщение было отмечено mr-Crocodile как решение
Решение
darknez1, перекрыл методы MouseDown и MouseUp класса TStringGrid. При нажатии мыши нужно проверять условия и если надо, то ограничивать движение мыши.
Добавлено через 52 минуты Модификация класса TStringGrid. Делается в том же модуле, где объявлен используемый StringGrid:
2
|
||||||
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 12:37 [ТС] | |
|
Спасибо AzAtom, вечером только смогу запустить на Delphi. Ты просто СУПЕР ПРОГРАММИСТ!
0
|
|
|
3054 / 1673 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||
| 06.02.2020, 14:48 | ||
![]() проект, конечно, красивый. вот только непонятно, почему Вы называете его работой с выделением. там своя отрисовка. Красная. Красивая. Но что она даёт и какое отношение имеет к Selection - мне не очень понятно. А ещё попробуйте мышкой границы сдвинуть:
1
|
||
| 06.02.2020, 14:48 | |
|
Выделение ячейки в Stringgrid
Выделение ячеек StringGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|