|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
Ограничить выделение в StringGrid-e30.01.2020, 07:06. Показов 4736. Ответов 46
Добрый день!
В Delphi имеется таблица StringGrid1 (20х20), по умолчанию выделять мышкой можно неограниченное количество ячеек, но как сделать так, чтоб при выделении мышкой не выделялись столбцы меньше 5 и больше 15, даже если нажатая левая кнопка мыши находилась за пределами выделения?
0
|
|
| 30.01.2020, 07:06 | |
|
Ответы с готовыми решениями:
46
|
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||
| 05.02.2020, 11:17 | ||
|
qwertehok, выложите исходники своего проекта, пожалуйста.
0
|
||
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||||||||
| 05.02.2020, 12:06 | ||||||||
![]() я взял стрингрид, на событие onSelectCell добавил обработчик вида:
0
|
||||||||
|
3053 / 1672 / 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
|
|
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,464
|
|
| 06.02.2020, 09:20 | |
|
0
|
|
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,464
|
||||||
| 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
|
|
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,464
|
||
| 06.02.2020, 09:56 | ||
|
Добавлено через 1 минуту Надо ковырять исходники StringGrid, ведь, он сам ограничивает выделение фиксированных строк и столбцов, они вообще не выделяются. Значит, это возможно в принципе.
0
|
||
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 09:57 [ТС] | |
|
Это как вариант, и там много ошибок, я его бы и не применил в основную программу, но направление мыслям задал
0
|
|
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,464
|
|
| 06.02.2020, 11:20 | |
|
Попробовал перекрыть выделение мышкой, если выделение начинается внутри разрешённой области и не выходит за пределы ячеек в гриде, то работает нормально. Но как только мышь выходит за пределы ячеек вообще, то начинается неконтроллируемое выделение ячеек.
Добавлено через 47 минут darknez1, а как должно работать, если щёлкнули вне разрешённой области выделения?
0
|
|
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 11:22 [ТС] | |
|
Ничего не должно происходить
0
|
|
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,464
|
|
| 06.02.2020, 11:30 | |
|
Всё, решил. Есть 2 варианта:
1. Если щёлкнули и начали выделать в разрешённой области, то можно выделять только в её пределах. Если щёлкнули вне разрешённой области, то просто курсор перемещается туда и всё, ничего не выделяется. 2. Независимо по какой ячейке щёлкнули, курсор перемещается в разрешённую область и можно выделять только в её пределах.
0
|
|
|
0 / 0 / 0
Регистрация: 30.01.2020
Сообщений: 48
|
|
| 06.02.2020, 11:32 [ТС] | |
|
Спасибо AzAtom, а код имеется? И какой подход использовал?
0
|
|
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,464
|
||||||
| 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
|
|
|
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
|
||
| 06.02.2020, 14:48 | ||
![]() проект, конечно, красивый. вот только непонятно, почему Вы называете его работой с выделением. там своя отрисовка. Красная. Красивая. Но что она даёт и какое отношение имеет к Selection - мне не очень понятно. А ещё попробуйте мышкой границы сдвинуть:
1
|
||
| 06.02.2020, 14:48 | |
|
Помогаю со студенческими работами здесь
40
Выделение ячейки в Stringgrid
Выделение ячеек StringGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|