Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Максим Рассохин от 05.08.2016, 17:09

Название: Как получить экранные координаты ячейки?
Отправлено: Максим Рассохин от 05.08.2016, 17:09
хочу получить экранные координаты ячейки, чтобы привязать (притянуть) диалоговое окно к ячейке. Как это сделать?
Проблема в том что координаты диалогового окна отсчитываются от левого верхнего угла экрана (физического)
А у меня пока получилось только считать свойства Target.Top и Target.Left, но они возвращают координаты от начала листа (от ячейки А1).
Кроме того нашел свойства смещение видимой области листа от первой ячейки Target.Application.ActiveWindow.VisibleRange.Top
и смещение окна документа в рабочей области окна Excel Target.Application.ActiveWindow.Top,
но они бесполезны, так как я не могу пересчитать их в экранные координаты.
Помогите. сейчас голова взорвется, пол дня справку изучаю, а толку ноль, .
Название: Re: Как получить экранные координаты ячейки?
Отправлено: Prist от 06.08.2016, 17:14
Цитата: Максим Рассохин от 05.08.2016, 17:09
пол дня справку изучаю
Значит теперь придется еще полдня изучать что такое API. Потому что без API Вы экранные координаты не определите. Вам потребуются как минимум две функции API:
GetCursorPos
GetSystemMetrics

И здесь вроде как есть пример использования: Календарь на стандартных элементах, примеры использования (http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=2&TID=6&TITLE_SEO=6&tags=&q=%D0%BA%D0%B0%D0%BB%D0%B5%D0%BD%D0%B4%D0%B0%D1%80%D1%8C+%D1%80%D1%8F%D0%B4%D0%BE%D0%BC+%D1%81+%D1%8F%D1%87%D0%B5%D0%B9%D0%BA%D0%BE%D0%B9&FORUM_ID%5B0%5D=0&DATE_CHANGE=0&order=relevance&s=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8)
Название: Re: Как получить экранные координаты ячейки?
Отправлено: Максим Рассохин от 08.08.2016, 23:33
Спасибо. Я попробую этот вариант, думаю с WinAPI все немного проще, но, кажется эти функции возвращают координаты мыши, сойдет на первое время.
А хотелось бы все таки получить именно координаты ячейки.
Название: Re: Как получить экранные координаты ячейки?
Отправлено: Максим Рассохин от 08.08.2016, 23:33
Пробовал просто вычесть координаты видимой области окна из координат ячейки, примерно так:
Target.Top - Target.Application.ActiveWindow.VisibleRange.Top + Target.Application.ActiveWindow.Top + 200
(здесь высота панели инструментов+ленты+заголовка заменена числовой константой, подобранной опытным путем)
вроде неплохо получилось, но при переходе к закрепленным ячейкам опять возникла ошибка, для них координаты видимой области вычитать не надо.
Можно конечно проверять закрепление ячеек и даже высоту панели инструментов (ленты, заголовков) вычислять, но алгоритм получается очень сложный, велика вероятность новых ошибок. Мне все таки кажется должен быть простой и надежный способ вычислить координаты ячеек.