Страница 1 из 3
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 18 Ноябрь 2021, 23:39
kreator
Собственно сабж. Хочется выделять ячейки нажав левую клавишу мыши. Пока нужно только в одном столбце. Есть какая-нибудь совсем правильная реализация? Дикий вариант у меня вроде получается. Ну уж очень дикий, на мой взгляд.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 22 Ноябрь 2021, 13:51
Губин Игорь
В голову приходит лишь отлавливание ячейки и смена стиля.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 22 Ноябрь 2021, 19:46
Игорь Столяров
Действительно, закрасить можно с использованием стилей или просто фоном.
Но здесь совсем негожая идея выделения ячеек левой кнопкой мышки в LIST.
Совсем. Проблема в LIST.
Мы делали давно через Ctrl+LeftMouse (или F8) - аналогично Excel.
Т.е. первый щелчок мышки (или кнопка F8) подсвечивает закраской начальную ячейку,
а второй щелчок мышки (или кнопка F8) уже закрашивает всю выбранную область ячеек.
Так - работает.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 22 Ноябрь 2021, 23:31
kreator
Игорь, почему негожая? Во-первых, так в Экселе. Во-вторых, proplist:MouseMoveRow и proplist:MouseMoveField чётко определяют положение мыши. Правда для этого пришлось воспользоваться таймером, событий на листе нет, во всяком случае документированных (я, в общем-то, думал, что есть недокументированные, и может, кто знает). К слову - много просят Экселевских штучек. В основном нам слабо. В общем, сделал по-простому, для начала не заморачиваясь. При таком режиме появилась ещё хотелка. В режиме "drag-n-drop" лист сам прокручивается при нахождении мыши в заголовке и снизу. Тоже надо сделать также.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 22 Ноябрь 2021, 23:47
Игорь Столяров
Потому, что LIST вообще негожий контрол для интерактивных операций.
С другой стороны - он для них и не создавался. У нас тоже есть места,
где долбим по таймеру, что бы получить данные о текущем состоянии LIST.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 0:09
finsoftrz
Что-то я не понял, каких событий нет. В швс есть стандартный функционал по отметке строк, я его даже скриншотил когда-то. Щелкаешь левой кнопкой мыши в колонке с маркером, пиктограмма меняется на другую. Здесь вроде ситуация аналогичная, только надо изменить стиль вместо пиктограммы. Никаких таймеров там точно нет. По моему, просто вешается alert на mouseleft и анализируется в какой колонке щелкнули.
А по поводу сделать как в эксель это загон. Эксель для совершенно других задач предназначен и по другому организован. В экселе не сделаешь как в кларионе, и это никого не парит.
А если хочется именно как в экселе, то самое простое делать все в экселе. Помнится, какой-то товарищ из Прибалтики пробовал продвигать учетную систему, которая вся в экселе, а база данных на каше. Есть такая старая key value база данных, у которой очень лаконичный синтаксис манипуляции данными и типа все помещается в виде формул в ячейки экселя.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 0:18
finsoftrz
Игорь Столяров писал(а): ↑22 Ноябрь 2021, 23:47
Потому, что LIST вообще негожий контрол для интерактивных операций.
С другой стороны - он для них и не создавался. У нас тоже есть места,
где долбим по таймеру, что бы получить данные о текущем состоянии LIST.
Можно поинтпресоваться, что такое в Вашей терминологии "интерактивные операции" и зачем и кого "долбите таймером"? Вдруг мне тоже надо.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 0:44
Дед Пахом
finsoftrz писал(а): ↑23 Ноябрь 2021, 0:09
По моему, просто вешается alert на mouseleft и анализируется в какой колонке щелкнули.
"Щёлкнули" поймать легко, а вот "Щёлкнули и, не отпуская кнопку, двигаем мышь от ячейки к ячейке" не очень легко (на самом деле очень).
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 1:12
finsoftrz
А, наверно это и имелось ввиду. Тогда сабклассить окно?
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 8:41
Игорь Столяров
finsoftrz писал(а): ↑23 Ноябрь 2021, 0:18
Вдруг мне тоже надо
В контексте данной темы обсуждения - это когда нам нужно получить событие о том,
что засветка LIST изменила положение. Что бы по событию запросить колонку и строку.
Использование ? Например, мы хотим построить некую табличку для редактирования показателей
"аля-эксел", где в первой колонке у нас контрагент, в 2,3,4 план доставки ему по декадам месяца,
а в 5-ой итог доставки за месяц ( = 2 + 3 + 4 ). Задача: удержите засветку в LIST на 2,3 и 4 колонках ...
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 9:46
finsoftrz
Не очень понял. Засветка это переменные перед полями в кьюшке, по которой работает лист.
А штатный путь для обхода ограничений accept это сабклассинг. Таймер совсем про другое.
Кларин accept работает таким образом, что пропускает нужные события, приходящие от ос, и отсекает все остальные. Если нужно изменить это и обработать события, которые accept отсекает, применяется сабклассинг. То есть назначается процедура, которая автоматически вызывается внутри рантайма перед тем, как accept начнет свою стандартную работу. В этой процедуре можно поймать и обработать, например, движение мыши над лист контролом, как, видимо, хотел критор. В справке был раздел, посвященный сабклассингу.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 9:49
Игорь Столяров
finsoftrz писал(а): ↑23 Ноябрь 2021, 9:46
В справке был раздел, посвященный сабклассингу
Хотелось бы увидеть реализацию. Причём работающий и под C63 и под C11.1 ...
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:09
finsoftrz
Я им практически не пользуюсь, так как предпочитаю работать штатными методами. По моему, в шаблоне пускача было. Ну и в справке почитать. Там, в общем, все просто. Главное найти коды событий, которые приходят от винды и которые надо поймать в процедуре сабклассинга.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:19
Игорь Столяров
finsoftrz писал(а): ↑23 Ноябрь 2021, 10:09
Там, в общем, все просто.
Возможно. Но т.к. я этого делать не умею - то просто долблю по таймеру и раз в секунду получаю текущую колонку ячейки.
И если она вывалилась из допустимого диапазона - возвращаю засветку в рабочую зону. В принципе, работает всё ...
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:20
kreator
Я бы тоже хотел увидеть реализацию. Для моей конкретики. Поэтому и спросил. Таймер не есть хорошо, согласен.