![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Узнать частоту обновления экрана и сменить её. [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