Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Соотношение сторон.


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо