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

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

Узнать частоту обновления экрана и сменить её. [D7, WinXP]


Galiaf ©   (2006-01-20 20:27:00) 

procedure ChangeDisplayResolution(x, y : word);
var
 dm : TDEVMODE;
begin
 ZeroMemory(@dm, sizeof(TDEVMODE));
 dm.dmSize := sizeof(TDEVMODE);
 dm.dmPelsWidth := x;
 dm.dmPelsHeight := y;
 dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
 ChangeDisplaySettings(dm, 0);
end;


Вот таким кодом изменяю разрешение экрана, преварительно запомнив старое, при смене разрешения частота обновления экрана сбивается т.е. я должен на время работы программы поставить нужное разрешение, а после её закрытия вернуть всё на свои места но сброс частоты явно мешает вернуть всё на свои места.


Кефир87   (2006-02-04 17:30:00) [1]

В Win9x бывали проблемы с восстановлением разрешения и частоты экрана. Если при выходе из программы написать вот такую штуку:

ChangeDisplaySettings(_devicemodeA(nil^), 0);

Проблема почему-то решелась 8) В XP проблем нет вапще 8)


Don Nikola   (2006-02-04 08:06:00) [2]

2Galiaf:
А где заветная константа CDS_FULLSCREEN в вызове ChangeDisplaySettings?
Если ее указывать, то, теоретически, все должно возвращаться обратно без изменений настроек экрана или положения иконок.
То есть, изменил разрешение, поработал, восстановил. Так в GDI-шных игрушках делается.


Galiaf   (2006-02-02 20:32:00) [3]

Я тоже согласен :)


antonn   (2006-01-31 13:34:00) [4]

Gero ©   (31.01.06 12:51) [13]
В корзину такую программу.

не, через shift...


kaZaNoVa   (2006-01-31 13:12:00) [5]

Gero ©   (31.01.06 12:51) [13]
согласен:)


Gero   (2006-01-31 12:51:00) [6]

> [8] Galiaf ©   (26.01.06 12:19)

В корзину такую программу.


Bobby   (2006-01-31 12:47:00) [7]

var
TempDm : TDeviceMode;
.............................................................
EnumDisplaySettings(nil, DWORD(-1) , TempDm);
Этот вызов сохраняет в TempDm текущие настройки.
Я правильно понял вопрос?


Kolan   (2006-01-29 19:07:00) [8]

Дело твое конечно. Но еслибы программа по тестированию сменила бы мне разрешение, то я её бы выкинул не думая ни секунду...

А что интересно при разрешениях более 1024 на 786?

Крометого я никак немогу представить себе программу для тестирования с настолько сложным интерфейсом, что его нельзя переделать и присутствует нехватка места...

Скриншот дай глянуть, любопытно...


Galiaf   (2006-01-29 18:24:00) [9]

У меня при разрешении экрана 1024х768 всегда возникали проблемы с местом. дело в том что дизайн она поручила не мне, а по её капризам я постоянно сражаюсь с нехваткой места на экране, темболее у меня в основном используются абсолютные координаты (я сразу не подумал что может возникнуть такяа роблема) и переделывать УЖЕ на 800х600 или на любое разрешение просто невозможно (относительно конечно, как говорит мой учитель по физике "всё относительно"). Вот я и решил, что сменить рарешение экрана будет проще всего.


Kolan   (2006-01-27 11:44:00) [10]

Так нев коем случае не делай. Форму нужно создавать так чтобы она умещалась на экране при любом разрешении. Тем более для такой программы это сделать нетрудно.

В помощь тебе. Ancors, Align, Splitter


Galiaf   (2006-01-26 12:19:00) [11]

Я делал прогу для тестирования по заказу училки, всё время улучшаю её по заказу всё той же училки, а как принёс её к другу у которого 800x600 (в школе 1024x768) заметил что там в экран ничего не помещается, вот решил сделать проверку, если разрешение 1024х768 то работаем дальше, иначе меняем разрешение а при выходе восстанавливаем. Всё ок вот только частота сбивается. Я был бы очень рад если бы вы сказали мне как сменить разрешение экрана не сбивая частоту.


Galiaf   (2006-01-26 12:19:00) [12]

Я делал прогу для тестирования по заказу училки, всё время улучшаю её по заказу всё той же училки, а как принёс её к другу у которого 800x600 (в школе 1024x768) заметил что там в экран ничего не помещается, вот решил сделать проверку, если разрешение 1024х768 то работаем дальше, иначе меняем разрешение а при выходе восстанавливаем. Всё ок вот только частота сбивается. Я был бы очень рад если бы вы сказали мне как сменить разрешение экрана не сбивая частоту.


GuAV   (2006-01-22 22:19:00) [13]

EnumDisplaySettings с параметром ENUM_CURRENT_SETTINGS и dmFields = DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY  or DM_DISPLAYFREQUENCY заполнит стр-ру TDevMode текущими параметрами.

Однако изменять и восстанавливать параметры монитора - IMHO, плохая идея хорошая - не трогать их, работая при любых параметрах.


Galiaf   (2006-01-22 21:27:00) [14]

С этим понятно, а как теперь установить это значение. Я о том, что программа при смене разрешения сбивает частоту. Запомнив частоту в начале её нужно вернуть в конце, а как это сделать?
P.S.
Извиняюсь конечно что переспросил, просто с WinAPI у меня туговато, ни как не могу книгу найти для изучения того чего незнаю но хочется.


begin...end   (2006-01-21 20:45:00) [15]

> Galiaf ©   (21.01.06 20:24) [2]

Вы хотите узнать частоту обновления экрана? Используйте GetDeviceCaps:

var
 Freq: Integer;
 DC: HDC;
begin
 DC := GetDC(0);
 Freq := GetDeviceCaps(DC, VREFRESH);
 ReleaseDC(DC)
end


Galiaf   (2006-01-21 20:24:00) [16]

А по точнее


Galiaf   (2006-01-21 20:24:00) [17]

А по точнее


begin...end   (2006-01-20 20:37:00) [18]

GetDeviceCaps


Наверх

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