Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Переходим на https. Просьба писать обо всех замеченных неисправностях.
  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как изменить разрешение экрана?  (Прочитано 12900 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vpdt
Гость
« : 12-12-2003 14:13 » 

Как изменить разрешение экрана?
Чтобы программно это задовалось?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 12-12-2003 15:06 » 

Посмотри ф. ChangeDisplaySettings в MSDN.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
GlukSoft
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 13-12-2003 15:31 » 

vpdt, вот пример
DEVMODE devmode;
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
devmode.dmPelsWidth = 800;
devmode.dmPelsHeight = 600;
ChangeDisplaySettings(&devmode, 0);
Записан

Fatal error C1: Brain expected
ixania
Гость
« Ответ #3 : 17-12-2003 22:32 » 

Иногда требуется, чтобы программа работала при чётко заданных параметрах монитора: разрешение, глубина цвета, частота обновления… Определить текущее разрешение просто, достаточно обратиться к объекту TScreen и посмотреть значения его полей Width и Height. А вот чтобы установить свои значения требуется обратиться к функции Api: ChangeDisplaySettings. Если мы хотим вернуть текущие настройки по завершении работы программы, то перед вызовом изменений надо запомнить эти настройки например таким образом:



uses ShellApi;
var
DefWidth, DefHeight, BPP: word;
...

procedure SaveSettings;
var
DC: hDC;
begin
DefWidth := Screen.Width;
DefHeight := Screen.Height;
DC := CreateDC('DISPLAY', nil, nil, nil);
BPP := GetDeviceCaps(DC, BITSPIXEL);
end;




После этого можно устанавливать свои параметры. Для упрощения собственной жизни я написал небольшую процедуру, которой надо только передать желаемые параметры и она их либо установит, либо сообщит о невозможности их установки.



procedure SetScreen(BPP:byte;width,height,FR:integer);
var
D: TDevMode;
h: HWND;
begin
h:=0;
D.dmDeviceName:='DISPLAY';
D.dmBitsPerPel:=BPP;
D.dmDisplayFrequency:=FR;
D.dmPelsWidth:=Width;
D.dmPelsHeight:=Height;
D.dmFields:=DM_BITSPERPEL+DM_PELSWIDTH+DM_PELSHEIGHT+DM_DISPLAYFREQUENCY;
D.dmSize:=SizeOf(D);
if ChangeDisplaySettings(D,CDS_TEST)=DISP_CHANGE_SUCCESSFUL then
ChangeDisplaySettings(D,CDS_UPDATEREGISTRY)
else
MessageBox(h,'This mode is not supported by your video.',
'Failed to change mode', MB_ICONWarning);
end;




Вызывается так: SetScreen(глубина цвета, разрешение по горизонтали, разрешение по вертикали, частота в герцах); Например:



SetScreen(16,800,600,80); {16 бит цвет, 800х600, 80Гц.}




При завершении программы для восстановления старых параметров вызываем эту процедуру с сохранёнными ранее значениями:



SetScreen(BPP,DefWidth,DefHeight,80);




Я не стал здесь беспокоиться о сохранении/возвращении частоты обновления, а сразу установил 80Гц, но если кто желает, может сохранить и этот параметр при запуске



DefFR:=GetDeviceCaps(DC, VREFRESH);




и восстановить при закрытии программы:



SetScreen(BPP,DefWidth,DefHeight,DefFR);
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 18-12-2003 08:54 » 

ixania,  Здорово!

Только форум по С/С++ для ОС.  Жаль  А у тебя кажется Delphi. А то кто-нить неглядя copy-n-paste сделает. Ты лучше в "Дельфи" тему открой. Я не знаю, смогут ли модераторы это расчленить и перенести?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
NetRaider
Гость
« Ответ #5 : 18-12-2003 09:03 » 

Цитата

Иногда требуется, чтобы программа работала при чётко заданных параметрах монитора: разрешение, глубина цвета, частота обновления…

 
IMHO не нужно писать таких программ...
Записан
FoxVID
Гость
« Ответ #6 : 18-12-2003 10:09 » 

Цитата

А то кто-нить неглядя copy-n-paste сделает

Ну зачем уж так плохо о заходящих на этот форум думать? Жаль
Я, к примеру, до того как набрел на этот форум, дооооолго пасся в Королевстве Дельфи и немало для себя взял. Думаю, что не только я.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 18-12-2003 10:29 » 

FoxVID,  я просто исхожу из опыта. Я не сказал, что ВСЕ так делают. Но многие новички видя много кода сразу вставляют его в прогу, доверяя пишущим. Если работает - начинают разбираться. Примеры этого можно найти даже у нас.

Я не имею ничего против Дельфи. Просто здесь С++, а Дельфи раздел у нас есть.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
ixania
Гость
« Ответ #8 : 19-12-2003 06:11 » 

Извините что на делфи выставил, я просто скопироовал и выставил из одной базы факов по дельфи, понимаю что сишный раздел но вопрос не касается чисто языка С++, да и помоч хотелось, может всю тему перекинуть, ведь вопрос интересен для обоих языков, разница ведь в синтаксе и паре мелочей. Я тож на одном С++ пишу, ну а инфу тащу откуда торлько возможно.
Записан
Anonymous
Гость
« Ответ #9 : 20-12-2003 12:42 » 

Ребята все нормально:)
Главное это информация
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines