![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Соотношение сторон.
eXAAAXe © (2011-06-23 18:21:00)привет.
Помогите написать функцию, определяющую соотношение сторон.
мой вариант:
function EqualFloat(const F1, F2: single): boolean;
begin
Result:= CompareValue(F1, F2) = 0;
end;
function GetAspect(W, H: LongWord): string;
var
Aspect: single;
begin
Aspect:= (W / H);
If EqualFloat(Aspect, 4 / 3) then Result:= '4x3' else // 1.33.
If EqualFloat(Aspect, 5 / 4) then Result:= '5x4' else // 1.25.
If EqualFloat(Aspect, 16 / 9) then Result:= '16x9' else // 1.78.
If EqualFloat(Aspect, 16 / 10) then Result:= '16x10' else // 1.60.
Result:= 'Unknown';
end;
у меня размеры монитора такие: 41 на 26. (Физические см.)
Т.е. 41 / 26 = 1.58 - функция вернут "Ункнавн".
как узнать соотношение моего монитора?
UP (2011-06-25 19:14:00) [1]Удалено модератором
eXAAAXe (2011-06-25 10:46:00) [2]EnumDisplaySettings максимальное возвращает разрешение: 1440 x 1050
А тут:
http://market.yandex.ru/model-spec.xml?modelid=6100149&hid=91052
Максимальное 1440x900.
Кому верить?
eXAAAXe (2011-06-24 16:13:00) [3]
> Омлет © (24.06.11 15:18) [31]
> Лучше EnumDisplaySettingsEx.
Можно обычный EnumDisplaySettings.
Омлет (2011-06-24 15:18:00) [4]> SQLEXPRESS (24.06.11 14:59) [30]
Лучше EnumDisplaySettingsEx.
SQLEXPRESS (2011-06-24 14:59:00) [5]ну да, откуда-то отсюда начать
http://msdn.microsoft.com/en-us/library/dd162610%28v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/aa920775.aspx
а в простейшем варианте я б написал
function GetAspect(W, H: LongWord): string;
var
Aspect: single;
begin
if H = 0 then
begin
W := GetSystemMetrics(SM_CXSCREEN); // текущее
H := GetSystemMetrics(SM_CYSCREEN);
end;
Aspect:= (W / H);
If EqualFloat(Aspect, 4 / 3) then Result:= '4x3' else // 1.33.
If EqualFloat(Aspect, 5 / 4) then Result:= '5x4' else // 1.25.
If EqualFloat(Aspect, 16 / 9) then Result:= '16x9' else // 1.78.
If EqualFloat(Aspect, 16 / 10) then Result:= '16x10' else // 1.60.
Result:= 'Unknown';
end;
eXAAAXe (2011-06-24 14:41:00) [6]
> Омлет © (24.06.11 14:34) [28]
Придется, так.
Омлет (2011-06-24 14:34:00) [7]> http://www.gamedev.ru/code/forum/?id=94134
Там есть действительно правильный совет:
"Погугли, есть WinAPI функция, которая перечисляет все доступные разрешения для монитора, а не для видеокарты. Берёшь самое максимальное и вычисляешь соотношение сторон."
eXAAAXe (2011-06-24 14:11:00) [8]Делал как тут советуют:
http://www.gamedev.ru/code/forum/?id=94134
SQLEXPRESS (2011-06-24 14:02:00) [9]т.е.
WSXGA or WXGA+ (?) 1440×900 16÷10 1 296 000
или, сократив на 2, да 8÷5.
>> EDID врёт что ли???
может
Palladin (2011-06-24 13:59:00) [10]пиксели дело такое... редко идеально квадратное....
eXAAAXe (2011-06-24 13:57:00) [11]
> SQLEXPRESS (24.06.11 13:47) [23]
У меня такой.
http://market.yandex.ru/model-spec.xml?modelid=6100149&hid=91052
1440 x 900 = 8 к 5.
Информация из EDID: 41 на 26 см.
EDID врёт что ли???
SQLEXPRESS (2011-06-24 13:47:00) [12]скажи уже разрешение,
или хотя бы марку
уже даже мне стало интересно, правильный ли у тебя монитор ;-)
вот например мой -
http://market.yandex.ru/model-spec.xml?modelid=929294&hid=91052
то есть, все понятно, SXGA 1280×1024 5÷4
eXAAAXe (2011-06-24 13:43:00) [13]
> SQLEXPRESS (24.06.11 13:38) [21]
>
> >> У меня монитор не правильный?
> тебе виднее
Это вопрос,а не утверждение Же!
> ну и где там про размеры самого монитора?
Название устройства и его разрешения в таблице.
SQLEXPRESS (2011-06-24 13:38:00) [14]>> У меня монитор не правильный?
тебе виднее
>> См. ниже "Компьютерные стандарты".
Компьютерный стандарт / Название устройства Разрешение Соотношение сторон экрана Пиксели, суммарно
ну и где там про размеры самого монитора?
eXAAAXe (2011-06-24 13:12:00) [15]
> ну тогда тебе сразу уже ответили.
>
> > 41 - простое число. Так что у тебя соотношение 41х26
У меня монитор не правильный?
eXAAAXe (2011-06-24 13:02:00) [16]
> Омлет © (24.06.11 12:49) [16]
> В реестре есть размеры монитора в сантиметрах? Я не понял,
> чего вы хотите. Озвучьте прикладную задачу.
Да есть.
См. EDID, 21 и 22 параметры.
> SQLEXPRESS (24.06.11 12:56) [18]
> а то что ты даешь ссылки - это не про размеры монитора.
> А про графические матрицы в них.
См. ниже "Компьютерные стандарты".
SQLEXPRESS (2011-06-24 12:56:00) [17]ну тогда тебе сразу уже ответили.
> 41 - простое число. Так что у тебя соотношение 41х26
а то что ты даешь ссылки - это не про размеры монитора. А про графические матрицы в них.
eXAAAXe (2011-06-24 12:50:00) [18]
> SQLEXPRESS (24.06.11 12:38) [13]
Суть программы:
1) Узнать размеры монитора. (Уже сделал)
2) Узнать соотношение сторон.
У моего монитора размеры 41 на 26, вот и думай теперь.
Омлет (2011-06-24 12:49:00) [19]> eXAAAXe (24.06.11 11:56) [10]
> У меня размеры монитора 41 на 26 см.
> Измерял линейкой и брал значения из реестра - цифры одни и те же.
В реестре есть размеры монитора в сантиметрах? Я не понял, чего вы хотите. Озвучьте прикладную задачу.
> Не подскажите соотношение?
Выставьте рекомендованное разрешение для вашего монитора - обычно это максимальное значение в настойках разрешения экрана. Возможно это 1920х1200 или 1600х1024, а может какое другое - зависит от монитора.
Потом эти размеры в пикселях передайте функции GetAspect - она вернет соотношение.
> Как переводиться GCD?
Наибольший общий делитель.
SQLEXPRESS (2011-06-24 12:43:00) [20]поясню, пусть пиксель будет 1,5х1
тогда 200 на 300 пикселей будет не 2:3, а очень даже 1:1