Страница 2 из 3
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:23
finsoftrz
Вот, дернул код для примера.
Размещаем локальный map в модуле оконной процедуры.
Код: Выделить всё
MAP
CSubClassFunc(UNSIGNED,UNSIGNED,UNSIGNED,LONG),LONG,PASCAL
END
Затем, после открытия окна размещаем такой код.
Код: Выделить всё
SavedProc = window{PROP:WndProc}
window{PROP:WndProc} = ADDRESS(CSubClassFunc)
Собственно, сама локальная процедура.
Код: Выделить всё
CSubClassFunc PROCEDURE(UNSIGNED shWnd,UNSIGNED swMsg,UNSIGNED swParam,LONG slParam)
LOC:WM_QUERYENDSESSION EQUATE(0011h)
LOC:WM_ENDSESSION EQUATE(0016h)
LOC:WM_PAINT EQUATE(000Fh)
LOC:WM_ERASEBKGND EQUATE(0014h)
Nerr UNSIGNED
CODE
CASE swMsg
OF LOC:WM_QUERYENDSESSION
RETURN(True)
OF LOC:WM_ENDSESSION
POST(Event:CloseDown,,1)
POST(MSERV_ICONTRAY,,1)
RETURN(True)
OF MSERV_ICONTRAY
IF slParam=202h
POST(MSERV_ICONTRAY,,1)
End
RETURN(0)
ELSE
IF INRANGE(swMsg,MSERV_GETNAME,MSERV_RECV)
MSrv.SubClassFuncMServ(shWnd,swMsg,swParam,slParam)
END
END
RETURN(CallWindowProc(SavedProc,shWnd,swMsg,swParam,slParam))
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:27
kreator
Про этот сабклассинг. Внутри Клаши есть всё. Только я воспользоваться этим не могу. Причём здесь Винда? Условно говоря. Конкретно. Вы ведёте мышкой над листом. Таймера нет. Лист же понимает где Вы ведёте? Понимает. Тултипсы же отображаются корректно. Я тоже хочу понимать. Хорошо бы без сабклассинга и ВинАПИ.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:27
finsoftrz
В догонку, прототипы, которые могут пригодиться.
Код: Выделить всё
MODULE('Windows')
CallWindowProc(LONG,UNSIGNED,UNSIGNED,UNSIGNED,LONG),LONG,PASCAL,NAME('CallWindowProcA')
Shell_NotifyIcon(ULONG,LONG),RAW,PASCAL,NAME('Shell_NotifyIconA')
LoadIcon(UNSIGNED,*CSTRING),UNSIGNED,PASCAL,RAW,NAME('LoadIconA')
SetForegroundWindow(UNSIGNED),SIGNED,PASCAL
ShowWindow(UNSIGNED,SIGNED),SIGNED,PASCAL,PROC
END
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:33
finsoftrz
kreator писал(а): ↑23 Ноябрь 2021, 10:27
Про этот сабклассинг. Внутри Клаши есть всё. Только я воспользоваться этим не могу. Причём здесь Винда? Условно говоря. Конкретно. Вы ведёте мышкой над листом. Таймера нет. Лист же понимает где Вы ведёте? Понимает. Тултипсы же отображаются корректно. Я тоже хочу понимать. Хорошо бы без сабклассинга и ВинАПИ.
Понимает не list, а accept. Он получает события от винды и обрабатывает некоторые из них внутри себя автоматически, не передавая управление в структуру case event(). Поэтому Вы и не можете отследить это в своем коде. С помощью сабклассинга это ограничение обходится, и Вы можете отработать у себя в коде подобные события до того, как начнет свою стандартную работу accept.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:36
finsoftrz
В справке можно поискать по PROP:WndProc.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 10:42
finsoftrz
К слову, про аля эксель. Вот тут коллеги реализовали нечто похожее для редактирования табличных бланков. Думаю, не будут в претензии, если кину скриншот. Насчет реализации не уверен, думаю, можно обойтись обычными средствами клариона, без win api. Мне когда-то очень понравилось и хотел у себя во фреймворке реализовать нечто подобное, но так и не придумал ситуаций, когда это может быть практически полезно.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 15:05
Губин Игорь
Не оно?
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 15:37
Игорь Столяров
finsoftrz писал(а): ↑23 Ноябрь 2021, 10:42
реализовали нечто похожее
Разве это LIST Clarion ? Всё можно объяснить огромным объёмом работы ... кроме ячейки {D13}.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 16:33
finsoftrz
Игорь Столяров писал(а): ↑23 Ноябрь 2021, 15:37
finsoftrz писал(а): ↑23 Ноябрь 2021, 10:42
реализовали нечто похожее
Разве это LIST Clarion ? Всё можно объяснить огромным объёмом работы ... кроме ячейки {D13}.
Нет, конечно. Я это привел к фразе сделать как в эксель. Там выделение строк и столбцов мышкой работает.
То есть, в принципе, если очень захотеть, можно реализовать свою встроенную электронную таблицу чисто на кларионе. Не обязательно во все окно, можно и вариации на тему контрола. Я представляю, как это внутрях реализуется, только не вижу практического смысла. У меня все отчеты выводятся в list, а затем их можно автоматом сохранить в xls в том виде, как на экране. А дальше делать все, что нужно уже в экселе или калке. Есть и в обратном порядке, вставить в список товары для отбора в отчете из электронной таблицы или модифицировать какие-то данные на основании содержания электронной таблицы. Читал, что Микрософт в Аксапте тоже использует активно интеграцию с экселем, у них это фишка такая.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 16:43
Игорь Столяров
finsoftrz писал(а): ↑23 Ноябрь 2021, 16:33
Нет, конечно.
Фух ! А я уже приготовился дивиться, чего люди умеют в Clarion ...
Была когда-то идея стырить идею у 1С и выводить все отчёты в ячейки,
что бы любой отчёт легко сохранялся в XLSX ... но не сложилось что-то.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 17:00
finsoftrz
Самое забавное, что в 1с вывести встроенную таблицу работает медленнее, чем в кларионе вывести в эксель.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 17:08
Игорь Столяров
finsoftrz писал(а): ↑23 Ноябрь 2021, 17:00
чем в кларионе вывести в эксель
Ну это только после того, как RaFael подарил нам праздник с LibXLSX ...
А до этого с OLE Excel была полная жопа (ну нет другого слова).
Хотя некоторым это нравится. В смысле OLE.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 17:54
finsoftrz
До xlsx давным давно был dexcel Олега Руденко. В виде опенсорса, чистый кларион. Работает существенно быстрее, чем вывод в xlsx. Есть ограничения, если не выпендриваться с оформлением, то для обычных задач хватает. Я знаю также пару коммерческих проектов с прямым выводом в xls более позднего формата, чем у dexcel.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 19:01
kreator
finsoftrz писал(а): ↑23 Ноябрь 2021, 16:33
Я представляю, как это внутрях реализуется, только не вижу практического смысла. У меня все отчеты выводятся в list, а затем их можно автоматом сохранить в xls в том виде, как на экране. А дальше делать все, что нужно уже в экселе или калке.
Не мой случай. Хотелка по работе как в Экселе. В данном (моём) случае, это копирование значений в другие записи.
finsoftrz писал(а): ↑23 Ноябрь 2021, 17:54
До xlsx давным давно был dexcel Олега Руденко. В виде опенсорса, чистый кларион. Работает существенно быстрее, чем вывод в xlsx. Есть ограничения, если не выпендриваться с оформлением, то для обычных задач хватает. Я знаю также пару коммерческих проектов с прямым выводом в xls более позднего формата, чем у dexcel.
MS Office не всегда открывает старые xls. Да и устарел этот формат.
Выделить ячейки в листе мышью а-ля Excel
Добавлено: 23 Ноябрь 2021, 19:50
finsoftrz
В последних версиях мс офиса сделали настройку разрешения открытия файлов разных форматов. И некоторые форматы, в том числе biff4, который генерит dexcel, по умолчанию не включены. А так никаких проблем с открытием в офисах нет. Во всяких веб почтах может не поддерживаться встроенными просмотрщиками. Это касается именно biff4, более поздние версии xls открываются без проблем. Xlsx формируется медленнее в несколько раз и есть проблема с совместимостью у разных версий офисов и разных просмотрщиков. Поэтому я в настоящее время остаюсь на xls. Если нужно отправить по почте, то после формирования пересохраняю в более свежий формат, это много времени не занимает.