|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
Excel работает не с пикселями, а с поинтами. Для стандартного системного масштаба виндовс (96 точек на дюйм) один пиксель равен 0,75 поинта. Как мне узнать эту переменную у юзера, я ж не могу знать его масштаб. Средствами VBA и без WinAPI (GetSystemMetrics и др.) Или какой хитростью... Пробовал сделать скрытый Shape 100х100 пикселей, расположенный 100 пикс. слева и сверху, логики при считывания нового положения после изменения масштаба не выловил. Он и по пикселям сместился, и размер поинта изменился, да всё это ещё и стало неодинаково по горизонтали и вертикали. Нужно подвинуть Shape на один пиксель на экране. Подойдет любой легальный способ Excel'я. Может, в свойствах Application есть какое свойство? А то Application.InchesToPoints, например, не меняется, а я было обрадовался. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2014, 11:54 |
|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
Офис 2003. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2014, 11:55 |
|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
Guest v.22, 1) почему нельзя пользоваться WinAPI? 2) И WMI - тоже нельзя? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
3) В дюйме - 72 типографских пункта (point). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2014, 17:31 |
|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
Спасип. 1) Случались у меня проблемы с написанными winapi на 64 битных виндовс в 64 битных офисах. Там немало надо городить для совместимости, в общем-то для простейшей задачи. Поэтому не хочется. 2) Боюсь, что WMI тоже нельзя. Вот это "Win 32 _DesktopMonitor" у меня тоже вызывает опасения по поводу совместимости. Что запустится везде нормально, а не запустит юзеру дебаггер. ... Хочется средствами екселя как-то. 3) Ну, теперь-то стало понятно, что это величина от экрана не зависит. ... Для стандартного системного масштаба виндовс (96 точек на дюйм) один пиксель равен 0,75 поинта. Для системного масштаба виндовс 120 точек на дюйм один пиксель равен 0,60 поинта. Это видно при записи макроса процесса сдвигания объекта. Но как эту цифру выловить?! Сам же ексель её знает, что хорошо видно при записи макроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2014, 11:26 |
|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
Да, и с WMI есть небольшая засада ещё: соответствующая служба (инструментарий виндовс) может быть у клиента отключена ((( В нашем большом коллективе сталкивался с такой ситуацией пару раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2014, 11:46 |
|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
Guest v.22, 1) хочется-не хочется, а если задача совместимости стоит, то да, в каких-то местах удвоения кода не избежать. Хорошо ещё, совместимость с 16-битными системами не требуется. И ИМХО, это лучший вариант. 3) 72 [пункт/дюйм] ? 96 [пиксел/дюйм] = 0,75 [пункт/пиксел] 72 [пункт/дюйм] ? 120 [пиксел/дюйм] = 0,6 [пункт/пиксел] Какое арифметическое действие скрывается за знаком вопроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2014, 12:03 |
|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
13-й квартал, 3) Хорошо, но тогда другой вопрос - как выловить 120 точек на дюйм? Я ж с этого и начал: не могу узнать системный масштаб юзера легальным способом. А уж дальше я поделю! :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2014, 13:51 |
|
Excel. Подвинуть программно Shape на один пиксель.
|
|||
---|---|---|---|
#18+
Guest v.22, я бы воспользовался API, хотя бы потому, что код можно использовать не только в Excel: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
Не проверял в MS Office 2010 и выше, и в 64-битных системах, но с виду должно работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2014, 15:36 |
|
|
start [/forum/topic.php?fid=61&fpage=55&tid=2173853]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 133ms |
0 / 0 |