Работа с экраном.

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
MaxmaD
Сообщения: 23
Зарегистрирован: 07 авг 2004, 13:38

Как узнать\изменить разрешение, задать полноэкранный режим?
Грязь под ногами бродяг, чище чем фальшь сладких слов. (с) Ария. "Улица роз".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

ChangeDisplaySettings. Чтобы сделать полноэкранный режим, нужно просто окно растянуть на весь экран и сделать его системным модальным.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
MaxmaD
Сообщения: 23
Зарегистрирован: 07 авг 2004, 13:38

Хм... что то я не могу найти ChangeDisplaySettings.
Я поступил таким образом:

Код: Выделить всё

//Для растягивания на весь экран формы
form1.Left:=0;
form1.top:=0;
Form1.width:=screen.Width;
Form1.height:=Screen.Height;
//Соответственно screen.Width и Screen.Height показывают разрешение экрана.

А где находятся ChangeDisplaySettings?
Грязь под ногами бродяг, чище чем фальшь сладких слов. (с) Ария. "Улица роз".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

(C) MSND:

Код: Выделить всё

LONG ChangeDisplaySettings(
  LPDEVMODE lpDevMode,  // graphics mode
  DWORD dwflags         // graphics mode options
);

Windows NT/2000/XP: Included in Windows NT 3.5 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.
Иными словами делай include <windows.h> и используй.

P.S. Слово "фальшь" пишиться с мягким знаком в конце. Кипелов - Бог рока.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
MaxmaD
Сообщения: 23
Зарегистрирован: 07 авг 2004, 13:38

Я извиняюсь, я только начинающий и не знаю что такое include.
Если можно, ответьте по подробнее. Это всё прописывается в форме или создаётся/берётся специальный файл...

Допустим имеется форма, что надо сделать/написать и где.
Если можно приведите пример.
Заранее благодарен за ответ.
Грязь под ногами бродяг, чище чем фальшь сладких слов. (с) Ария. "Улица роз".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

В том файле, в котором будешь использовать данную функцию, напиши в самом начале:

Код: Выделить всё

   include <windows.h>
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
MaxmaD
Сообщения: 23
Зарегистрирован: 07 авг 2004, 13:38

Спасибо Вам, Romeo за объяснения. После того как я разобрался, случайно нашёл интересную статью на эту тему. Там рассказывается про функцию Api: ChangeDisplaySettings. Я думаю, что это было бы многим полезно.

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

Код: Выделить всё

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(16,800,600,80); {16 бит цвет, 800х600, 80Гц.};
Грязь под ногами бродяг, чище чем фальшь сладких слов. (с) Ария. "Улица роз".
Ответить