Выделить ячейки в листе мышью а-ля Excel

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение kreator »

Собственно сабж. Хочется выделять ячейки нажав левую клавишу мыши. Пока нужно только в одном столбце. Есть какая-нибудь совсем правильная реализация? Дикий вариант у меня вроде получается. Ну уж очень дикий, на мой взгляд.
We are hard at work… for you. :)
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение Губин Игорь »

В голову приходит лишь отлавливание ячейки и смена стиля.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение Игорь Столяров »

Действительно, закрасить можно с использованием стилей или просто фоном.
Но здесь совсем негожая идея выделения ячеек левой кнопкой мышки в LIST.
Совсем. Проблема в LIST. :(

Мы делали давно через Ctrl+LeftMouse (или F8) - аналогично Excel.
Т.е. первый щелчок мышки (или кнопка F8) подсвечивает закраской начальную ячейку,
а второй щелчок мышки (или кнопка F8) уже закрашивает всю выбранную область ячеек.
Так - работает. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение kreator »

Игорь, почему негожая? Во-первых, так в Экселе. Во-вторых, proplist:MouseMoveRow и proplist:MouseMoveField чётко определяют положение мыши. Правда для этого пришлось воспользоваться таймером, событий на листе нет, во всяком случае документированных (я, в общем-то, думал, что есть недокументированные, и может, кто знает). К слову - много просят Экселевских штучек. В основном нам слабо. В общем, сделал по-простому, для начала не заморачиваясь. При таком режиме появилась ещё хотелка. В режиме "drag-n-drop" лист сам прокручивается при нахождении мыши в заголовке и снизу. Тоже надо сделать также.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение Игорь Столяров »

Потому, что LIST вообще негожий контрол для интерактивных операций.
С другой стороны - он для них и не создавался. У нас тоже есть места,
где долбим по таймеру, что бы получить данные о текущем состоянии LIST.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Выделить ячейки в листе мышью а-ля Excel

Сообщение finsoftrz »

Что-то я не понял, каких событий нет. В швс есть стандартный функционал по отметке строк, я его даже скриншотил когда-то. Щелкаешь левой кнопкой мыши в колонке с маркером, пиктограмма меняется на другую. Здесь вроде ситуация аналогичная, только надо изменить стиль вместо пиктограммы. Никаких таймеров там точно нет. По моему, просто вешается alert на mouseleft и анализируется в какой колонке щелкнули.

А по поводу сделать как в эксель это загон. Эксель для совершенно других задач предназначен и по другому организован. В экселе не сделаешь как в кларионе, и это никого не парит.
А если хочется именно как в экселе, то самое простое делать все в экселе. Помнится, какой-то товарищ из Прибалтики пробовал продвигать учетную систему, которая вся в экселе, а база данных на каше. Есть такая старая key value база данных, у которой очень лаконичный синтаксис манипуляции данными и типа все помещается в виде формул в ячейки экселя.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Выделить ячейки в листе мышью а-ля Excel

Сообщение finsoftrz »

Игорь Столяров писал(а): 22 Ноябрь 2021, 23:47 Потому, что LIST вообще негожий контрол для интерактивных операций.
С другой стороны - он для них и не создавался. У нас тоже есть места,
где долбим по таймеру, что бы получить данные о текущем состоянии LIST.
Можно поинтпресоваться, что такое в Вашей терминологии "интерактивные операции" и зачем и кого "долбите таймером"? Вдруг мне тоже надо. :roll:
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Выделить ячейки в листе мышью а-ля Excel

Сообщение Дед Пахом »

finsoftrz писал(а): 23 Ноябрь 2021, 0:09 По моему, просто вешается alert на mouseleft и анализируется в какой колонке щелкнули.
"Щёлкнули" поймать легко, а вот "Щёлкнули и, не отпуская кнопку, двигаем мышь от ячейки к ячейке" не очень легко (на самом деле очень).
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Выделить ячейки в листе мышью а-ля Excel

Сообщение finsoftrz »

А, наверно это и имелось ввиду. Тогда сабклассить окно?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение Игорь Столяров »

finsoftrz писал(а): 23 Ноябрь 2021, 0:18 Вдруг мне тоже надо
В контексте данной темы обсуждения - это когда нам нужно получить событие о том,
что засветка LIST изменила положение. Что бы по событию запросить колонку и строку.

Использование ? Например, мы хотим построить некую табличку для редактирования показателей
"аля-эксел", где в первой колонке у нас контрагент, в 2,3,4 план доставки ему по декадам месяца,
а в 5-ой итог доставки за месяц ( = 2 + 3 + 4 ). Задача: удержите засветку в LIST на 2,3 и 4 колонках ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Выделить ячейки в листе мышью а-ля Excel

Сообщение finsoftrz »

Не очень понял. Засветка это переменные перед полями в кьюшке, по которой работает лист.
А штатный путь для обхода ограничений accept это сабклассинг. Таймер совсем про другое.
Кларин accept работает таким образом, что пропускает нужные события, приходящие от ос, и отсекает все остальные. Если нужно изменить это и обработать события, которые accept отсекает, применяется сабклассинг. То есть назначается процедура, которая автоматически вызывается внутри рантайма перед тем, как accept начнет свою стандартную работу. В этой процедуре можно поймать и обработать, например, движение мыши над лист контролом, как, видимо, хотел критор. В справке был раздел, посвященный сабклассингу.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение Игорь Столяров »

finsoftrz писал(а): 23 Ноябрь 2021, 9:46 В справке был раздел, посвященный сабклассингу
Хотелось бы увидеть реализацию. Причём работающий и под C63 и под C11.1 ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Выделить ячейки в листе мышью а-ля Excel

Сообщение finsoftrz »

Я им практически не пользуюсь, так как предпочитаю работать штатными методами. По моему, в шаблоне пускача было. Ну и в справке почитать. Там, в общем, все просто. Главное найти коды событий, которые приходят от винды и которые надо поймать в процедуре сабклассинга.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение Игорь Столяров »

finsoftrz писал(а): 23 Ноябрь 2021, 10:09 Там, в общем, все просто.
Возможно. Но т.к. я этого делать не умею - то просто долблю по таймеру и раз в секунду получаю текущую колонку ячейки.
И если она вывалилась из допустимого диапазона - возвращаю засветку в рабочую зону. В принципе, работает всё ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Выделить ячейки в листе мышью а-ля Excel

Сообщение kreator »

Я бы тоже хотел увидеть реализацию. Для моей конкретики. Поэтому и спросил. Таймер не есть хорошо, согласен.
We are hard at work… for you. :)
Ответить