XL: Единицы измерения в Excel
Смешно, если б не было так грустно, специально сейчас проверил, на своем мониторе при разрешении 640*800 верхний край UserForm исчезает уже при значении Top=448(таскбар убран)...
Теперь пытаюсь понять, в каких же единицах задается этот самый UserForm.Top???
Может кто-нибудь в курсе этого прикола, а главное, как у Вас там с этим свойством?
640*800
Конечно же - 600*800 (640 это я о чем то другом думал)
Но вопрос остается, кто-нибудь в курсе в каких координатах задается положение UserForm в Excel...?
Но вопрос остается, кто-нибудь в курсе в каких координатах задается положение UserForm в Excel...?
???
???
У меня при 1024х768 правый нижний угол экрана получается при 767х575.
Эта хрень, очевидно, меряется в микрософтах. 1000 микрософтов = 1 миллисофт, 1000 миллисофтов = 1 софт. Эталонный экземпляр 1 софта хранится в Парижской Палате Мер и Софтов. В пиксели переводится по формуле 4 пикселя = 3 микрософта.
Интересна историческая подоплека появления такой единицы. Когда выбирался размер пикселя, ответственный за это Уильям Ворота (Сиэтл, США), выбрал пиксель равным 1/1024 ширины своей задницы. Когда дело дошло до выбора единицы измерений для свойств .Top и .Left у формы в Экселе, Уильям вспомнил о той своей концепции, и принял за единицу 1/1024 ширины своего зада. Однако он забыл учесть, что ввиду большого коммерческого успеха предыдущих продуктов его фирмы задница Уильяма стала шире на 33.3%. Так получилась новая единица измерения - микрософт.
P.S. Cutty Sark, а ты мою просьбу не пропустил на счет исправления Си/С++ на VBA.... а то не хочется пугать народ :roll:
я тут даже подумал, может они в миллиметрах, решили задавать, но опять не дотягивает, там от силы 5 милл.
point: Unit of measure referring to the height of a printed character. A point equals 1/72 of an inch, or approximately 1/28 of a centimeter.)
о как, интересно токо какой дюйм они имеют ввиду, логический, физический или еще какой
Нашел наконец эту загадачную микрософсткую величину, пойнтом ее кличат:
point: Unit of measure referring to the height of a printed character. A point equals 1/72 of an inch, or approximately 1/28 of a centimeter.)
о как, интересно токо какой дюйм они имеют ввиду, логический, физический или еще какой
point-это точка, а дюйм это приблизительно 2,25 сантиметра
point-это точка, а дюйм это приблизительно 2,25 сантиметра
2,24 если быть точным, но это нормальный дюйм, физический, а главное, меня это не греет, мне то нужно в пикселях. Через API я могу получить кол-во пикселей в логическом дюйме, но он не приблизительно в 1,5 раз больше физического дюйма, т.е. точно не известно во скоко раз больше лог. дюйм реального (наверное потому что это никому не надо). Поэтому если они имели ввиду физический дюйм, тогда надо перевести скоко это составит в лог. дюймах, потом узнать скоко пикселей в лог. дюйме, а потом уже расчитать скоко пикселей уместилось.... если половина данных из необходимых известна как - приблизительно, то проще наверное просто найти конечный коэффицент и его использовать, тем более, что судя по всему, разницы между разрешениями 800*600 и 1024*768 нету, а на счет других можно и положить... :(
1 point == 1 pixel/72 * dpi,
dpi - это то что в свойствах экрана называется кол-во точек в дюйме, обычно равняется 96 (на больших мониторах это значение больше),
так что произведя эти вычисления мы как раз и получим свои 1,333
О, нашел кажись:
1 point == 1 pixel/72 * dpi,
dpi - это то что в свойствах экрана называется кол-во точек в дюйме, обычно равняется 96 (на больших мониторах это значение больше),
так что произведя эти вычисления мы как раз и получим свои 1,333
Парни, дюйм 2.54см, а не 2.24.(см. сюда)
Ну да ладно... А я вчера подумал про эти точки, в Корел Дро есть переключатель единицы измерения - пиксель-точка. Готов понять, когда эти точки применяются для того, что на печать вылезает. Но зачем формы к ним привязывать? Загадка природы...
Парни, дюйм 2.54см, а не 2.24.(см. сюда)
Ну да ладно... А я вчера подумал про эти точки, в Корел Дро есть переключатель единицы измерения - пиксель-точка. Готов понять, когда эти точки применяются для того, что на печать вылезает. Но зачем формы к ним привязывать? Загадка природы...
Каюсь, запамятовал, конечно 2,54
На счет выбора единици измерений, points это еще не конец спектакля - в том же Access разработчикам очень полюбились твипы (Твип - это 1/1440 дюйма)
Вообщем, больше единиц измерений, хороших и разных, даешь..... наверное такой плакат висит в комнате у программистов майкрософта
Ну ладно, с этим более менее понятно, но борьба продолжается, вопрос: А в чем измеряют ШИРИНУ столбцов Excel??? это что, те же points, а почему величины другие, там что dpi по гориз. и верт. разные что-ли
Ну ладно, с этим более менее понятно, но борьба продолжается, вопрос: А в чем измеряют ШИРИНУ столбцов Excel??? это что, те же points, а почему величины другие, там что dpi по гориз. и верт. разные что-ли
Про ширину я знаю - это среднее количество символов типа 0-9 (например, восьмёрок), помещающееся в ячейке. Шрифт берётся тот, который в меню Сервис/Параметры... вкладка "Общие".
Неужели, Серёж, ты сам не догадался? Это же так естественно... :)
Про ширину я знаю - это среднее количество символов типа 0-9 (например, восьмёрок), помещающееся в ячейке. Шрифт берётся тот, который в меню Сервис/Параметры... вкладка "Общие".
Неужели, Серёж, ты сам не догадался? Это же так естественно... :)
Да читал когда-то краем глаза, но уже очень не хотелось верить, что такой геморой с переводом в пиксели будет, это ведь тогда надо брать шрифт, определять его параметры, потом вычислять.... йо хо хо и бутылка рома
Я окончательно уехала! Твоя крыша. :)
Полученный модуль - mdlSysMetrics.zip, выложил в Исходниках->Офисные приложения.
В нем реализованы следующие осн. функции:
1. WidthExcColToPixel - переводит ширину столб. Excel в пиксели.
1. PointToPixel - перевод points в пиксели.(испол. для получения высоты строки Excel в пикселях)
2. PixelToPoint - перевод пикселей в points.
3. MetricsFont - возвращает хар-ки указанного шрифта: ср. ширину символа, макс. ширину символа, высоту символа, величину межстрочного интервала.
P.S. Cutty Sark: я думал это у меня Opera глючит, а оказалось что и через IE такая же фигня, добавляешь файл в Исходники указывая язык VBA, а получается С/С++. Не, я понимаю, что язык Си крутой, но что до такой степени... , наверное прям на ходу все конвертируется в него :-)
Обратишь там внимание кого следует..., ок!?
Наконец-то домучил вычисление ширины и высоты столбцов и строк в Excel.
Полученный модуль - mdlSysMetrics.zip, выложил в Исходниках->Офисные приложения.
В нем реализованы следующие осн. функции:
1. WidthExcColToPixel - переводит ширину столб. Excel в пиксели.
1. PointToPixel - перевод points в пиксели.(испол. для получения высоты строки Excel в пикселях)
2. PixelToPoint - перевод пикселей в points.
3. MetricsFont - возвращает хар-ки указанного шрифта: ср. ширину символа, макс. ширину символа, высоту символа, величину межстрочного интервала.
Возможно я не правильно понял твои проблемы, но!
В принципе в ВБА Экселя есть куча функций PointTo... и обратно, например PointsToScreenPixelsX и PointsToScreenPixelsY
А поинты пошли из ВизиВиг (что вижу, то и печатаю)
В них, в частности, задаются размеры шрифтов.
Возможно я не правильно понял твои проблемы, но!
В принципе в ВБА Экселя есть куча функций PointTo... и обратно, например PointsToScreenPixelsX и PointsToScreenPixelsY
А поинты пошли из ВизиВиг (что вижу, то и печатаю)
В них, в частности, задаются размеры шрифтов.
Ну главная проблема была по переводы ширины столбца Excel, которая опр. в кол-ве символов, кроме того определения ширины символов шрифта удобно и для других целей (для опр. длины строки есть конечно другая API функция более удобная, чем ср. ширина символов..., может я допишу ее к этому модулю)
А на счет PointsToScreenPixelsX, это конечно замечательно, но чтото я с ними не разобрался, то ли они другие Points имеют в виду, но у меня то была задача перевести высоту строк Excel (именно их Points), а PointsToScreenPixelsX(Y) возвращают какие-то другие значения, например: высота в Excel строки = 13.5 это соотв. 18 пикселям, а PointsToScreenPixelsY возвращает 145, так что не ничего не понял и написал свои функции
P.S. дописал для этого модуля функцию по определению длины/высоты заданной строки опр. шрифта, после всестороннего обсуждения можно будет ее добавить в итоговый модуль
у объекта Range есть такие свойства:
.Height и RowHeight и оба они возвращают одинаковую высоту в points,.... дойдя до них, я автоматом подумал что с .Width и .ColumnWidth такая же фигня, и стал писать для них отдельную функцию
Однако с шириной все немного хитрее: .Width возвращает ширину в их дурацких кол-вах символов шрифта по умолч. умещающихся в ячейке, а вот .ColumnWidth возвращает эту же ширину но уже в их любимых points.... так что в принципе без WidthExcColToPixel и MetricsFont можно и обойтись (хотя все равно прикольно)
Продолжая разбираться с этими ширинами и высотами допетрил наконец до замысла программистов microsoft на счет ширины столбца:
у объекта Range есть такие свойства:
.Height и RowHeight и оба они возвращают одинаковую высоту в points,.... дойдя до них, я автоматом подумал что с .Width и .ColumnWidth такая же фигня, и стал писать для них отдельную функцию
Однако с шириной все немного хитрее: .Width возвращает ширину в их дурацких кол-вах символов шрифта по умолч. умещающихся в ячейке, а вот .ColumnWidth возвращает эту же ширину но уже в их любимых points.... так что в принципе без WidthExcColToPixel и MetricsFont можно и обойтись (хотя все равно прикольно)
Блин, перлепутал, наоборот: .Width - в points, а .ColumnWidth в кол-ве символов