:: Visual Foxpro, Foxpro for DOS
Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Решил открыть новую ветку, может продолжим тут, тем более хотелось бы разобраться в одной штуке, а инфы найти не могу, может кто даст ссылку на годную статью или по-простому огбъяснит мне, как решить данную задачу.
Пример такой, в Екселе если рисовать квадрат с одинаковой высотой и шириной необходимо указывать ширина=1, а высота=12 (примерно), и в целом конечно к этой непонятной системе координат можно привыкнуть, но, когда начинаешь пытаться сделать масштабирование, то тут уже не прокатит ширина=0,5, а высота=6...

Хотелось бы разобраться как именно и почему екселька для ширины и высоты объектов использует разные единицы измерения? как найти правильно коэффициент между ними при любм масштабе.

Я уже как-то задавал этот вопрос в какой-то ветке, но получил ответ, типа подбирай, я-то подобрал, но хотелосб бы разобраться, что не так с этим всем
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Высота строки всегда идёт в пикселях. Майкрософт считает, что в дюйме 72 пикселя (но не всегда, в фоксе - 96 пикселей на дюйм).
С шириной - всё гораздо хуже. Ширина столбца считается в средних ширинах символов для того шрифта, который выбран по-умолчанию для книги.
В фоксе перевести ширину символа в пиксели можно с помощью FONTMETRIC(6, ...), только параметры шрифта надо правильно заполнить.

Это майкрософт выпендривается:
support.microsoft.com

Это люди обходят как майкрософт выпендривается:
www.vbaexpress.com
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
ry

Сообщений: 2113
Дата регистрации: 24.09.2007
Высота строки указывается в пунктах, ширина столбца - в символах. Вроде бы берется количество символов для шрифта размером 10 пунктов, но не ясно, для какого именно. Соотношение у меня 10 символов = 97 пикселей, но это, я так понимаю, зависит от разрешения экрана, а с пунктами соответствие надо выводить.
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Я пытаюсь сделать так:

mKFTR=1
lnWi=10*mKFTR
lnHe=Fontmetric(6,"Arial Cyr",10)*lnWi

Не могу разобраться, но так нифига не работает

Действительно шрифт и его размер не совпадал с тем что я думал, нашёл как их считать, но всё равно нифига не работает:

lnWi=2*mKFTR
mFontName=.ole1.object.Application.StandardFont
mSize=.ole1.object.Application.StandardFontSize
lnHe=Fontmetric(6,mFontName,mSize)*lnWi



Исправлено 1 раз(а). Последнее : AngelOKES, 20.02.19 08:27
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Ну, если бы у майкрософта всё так прозрачно было, то это был бы не майкрософт.

Вроде так должно работать. У меня получается квадратная первая ячейка, но только если дефолтный стиль книги на первом месте.
loExcel = CREATEOBJECT("Excel.Application")
loExcel.Visible = .T.
loBook = loExcel.WorkBooks.Add()
loSheet = loBook.Sheets(1)
loStyle = loBook.Styles(1)
lcFontName = loStyle.Font.Name
lnSize = loStyle.Font.Size
llBold = loStyle.Font.Bold
llItalic = loStyle.Font.Italic
lnCharAvg = FONTMETRIC(6, lcFontName, lnSize, IIF(llBold, "B", "")+IIF(llItalic, "I", ""))
lnPxToSet = 140
lnWidth = ((lnPxToSet - 4) / lnCharAvg)
lnHeight = lnPxToSet / loBook.WebOptions.PixelsPerInch * 72
loSheet.Cells(1, 1).EntireColumn.ColumnWidth = lnWidth
loSheet.Cells(1, 1).EntireRow.RowHeight = lnHeight



Исправлено 1 раз(а). Последнее : pasha_usue, 20.02.19 09:58
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
lcFontName=.ole1.Object.Application.StandardFont
lnSize=.ole1.Object.Application.StandardFontSize
lnHe=10*mKFTR
lnCharAvg = Fontmetric(6, lcFontName, lnSize)
lnWi=(lnHe/lnCharAvg)*.ole1.Object.WebOptions.PixelsPerInch/72*2.5

Вот так вот более-менее получается ровно, но приходиться ширину полученную умножать ещё на 2,5
Фигня какая-то
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
AngelOKES
Вот так вот более-менее получается ровно, но приходиться ширину полученную умножать ещё на 2,5
Значит, .ole1.Object.WebOptions.PixelsPerInch не возвращает реальный DPI экрана. Его надо как-то иначе получить.
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Вот функция Володи Максимова. Сравните, что выдаёт она, а что выдаёт PixelsPerInch.
* Следующие API функции используются для расчета переводного коэффициента
* из пикселей (их дает VFP60) в твипы (они нужны функции HitTest())
DECLARE INTEGER GetActiveWindow IN WIN32API
DECLARE INTEGER GetDC IN WIN32API INTEGER iHDC
DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER iHDC, INTEGER iIndex
LOCAL liHDC
liHDC = GetDC(GetActiveWindow())
?GetDeviceCaps(m.liHDC,88)
?GetDeviceCaps(m.liHDC,90)
* Освобождение контекста устройства, для освобождения памяти
DECLARE INTEGER ReleaseDC IN WIN32API INTEGER, INTEGER
=ReleaseDC(GetActiveWindow(),m.liHDC)
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Если это делать просто в среде фокса, то 96 и 96
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
AngelOKES
Если это делать просто в среде фокса, то 96 и 96
.ole1.Object.WebOptions.PixelsPerInch тоже 96? Тогда надо что-то дальше думать.
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Да тоже 96, проверил также и уже в запущенно программе, показатели все такие же
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
AngelOKES
Да тоже 96, проверил также и уже в запущенно программе, показатели все такие же
Я поправил код. На самом деле, ширина уже получается в типографских пунктах. Высоту необходимо из пикселей переводить в пункты.

Но, правда, вам это не поможет.
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Походу, что-то добавилось либо в Win10, либо в Excel 2016.
У меня тоже вертикальный коэффициент где-то 1.25, и горизонтальный 1.13 возникает.

У меня два монитора. Когда на малый переходишь, вертикальный становится 1.0, а горизонтальный - 1/1.13 (наоборот).

Ковырял GetDpiForMonitor и GetDeviceCaps. Ничего похожего там нет.

PS. 1.13, 1.25 и 2.5 кратны друг-другу. Но что это такое - не понятно.



Исправлено 1 раз(а). Последнее : pasha_usue, 20.02.19 12:02
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Будем искать...
Я пока оставлю тот вариант, с подкрученным коэффициентом вроде работает и масштабирование нормально работает, но разобраться конечно же хотелось бы и да я пока тестирую только на одном мониторе, не знаю как это будет выглядить на другом
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Может, поможет. Зачем-то миллиметры высчитывал на экране монитора. Там есть комментарии и ссылки.
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
OFF TOP

Некоторые "хотелки" юзеров вызывают... как бы это сказать помягче. Вот представим. Вызывает директор главбуха и говорит:
- Отныне баланс делайте не только "обычными" числами, но и римскими. Я так хочу. Бух прибегает к программеру и говорит:
- Надо срочно сделать баланс римскими числами.

Программер чешет репу и пишет конвертер, выравнивает ячейки по ширине и высоте и т.п.

Вот такие бывают "хотелки".
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
of63
Может, поможет. Зачем-то миллиметры высчитывал на экране монитора. Там есть комментарии и ссылки.

Интересненько...
Ну значит у меня стандартный 96 pdi

of63
72/96=0.75

А не в этом ли у нас была ошибка? Мы же наоборот делили на 72
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
of63
Может, поможет. Зачем-то миллиметры высчитывал на экране монитора. Там есть комментарии и ссылки.
Очень похоже, что надо рассчитывать такую пропорцию: GetDeviceCaps(liHDC, VERTRES) / GetDeviceCaps(liHDC, DESKTOPVERTRES)
Но для горизонтали опять не работает.
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
AngelOKES
А не в этом ли у нас была ошибка? Мы же наоборот делили на 72
Ошибка не в этом. Ошибка в контексте, в котором выполняется FONTMETRIC. Он выполняется для фокса, а надо для экселя. Я проверил, у меня для фокса и экселя GetDpiForWindow возвращает разные значения. Значит и GetTextMetrics должен выполняться в контексте экселя. И там мы получим другое значение.
GetTextMetrix это API функция, на базе которой FONTMETRIC работает.
Ratings: 0 negative/0 positive
Re: Соотношение ширины и высоты в Excel и масштабирование
AngelOKES
Автор

Сообщений: 828
Дата регистрации: 08.02.2012
Не буду наверное новую тему открывать, эта тема в принципе вполне подходит...
Никак не могу сообразить как грамотно написать алгоритм перестройки координат объектов.
Что дано:
1) Таблица с описанием всех объектов, есть их условные координаты, PnX и PnY, там что-то типа PnX=3, значит третий элемент по горизонтали (значит над ним есть ещё 2 объекта), PnY=1, значит данный объект в самой первой строчке и над ним ничего нет.

2) Есть так скажем центральные координаты выраженная в единицах, которые использует Excel, поля xCol и yRow, у первого элемента с координатами PnX=1 и PnY=1 они всегда будут равны 10 и 10, а дальше уже конечно же будут увеличены в зависимости от масштаба KFTR, и ширины и высоты предыдущих объектов (WiALl и HeAll).
К примеру если у первого элемента будет стоять WiALl=10 и HeAll=10, то координаты для следующего объекта по горизонтали будут равны xCol=xCol+WiALl*(здесь будет определённый коэффициент, который будет вычисляться в зависимости от kftr), а yRow=yRow, если же по вертикали вниз, то yRow=yRow+HeAll*(здесь будет определённый коэффициент, который будет вычисляться в зависимости от kftr), а xCol=xCol.

Теперь когда меняется общий коээфициент, мне необходимо пересчитать все координаты отличные от PnX=1 и PnY=1 и по вертикали и по горизонтали...
Если кому-то будет интересно, но что-то будет неясно, то буду рад разъяснить какие-то моменты...

Или могу создать новую ветку



Исправлено 1 раз(а). Последнее : AngelOKES, 28.02.19 15:22
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 47 (Гостей: 47)

© 2000-2024 Fox Club 
Яндекс.Метрика