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

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

Разрешение [D7, Win95/98, WinXP]


Кирилл ©   (2004-09-20 15:14:00) 

Скажите пожалуйста, как програмно поменять разрешение экрана в виндусе?


XProger   (2004-09-21 01:57:00) [1]

Zacho, какой из тебя кодер тогда? Если из-за куска кода забиваешь на остальной кусок? Допустим он пишет под OpenGL и что? Хочешь сказать, что ему необходимо писать под DirectX? Смешно сказал однако...

Кирилл, вот немного улучшенный вариант
Freq - частота обновления монитора 60 - 120+
BPP - количество бит на пиксель

function xglChangeMode(FullScreen: boolean; Width, Height: integer; BPP: Byte; Freq: Byte): boolean; stdcall;
var
dev : TDeviceMode;
res : DWORD;
begin
Result := false;
if FullScreen then
begin
FillChar(dev, SizeOf(dev), 0);
dev.dmSize := sizeof(dev);
EnumDisplaySettings(nil, 0, dev);
with dev do
 begin
 dmPelsWidth        := Width;
 dmPelsHeight       := Height;
 dmBitsPerPel       := BPP;
 dmDisplayFrequency := Freq;
 dmFields := DM_BITSPERPEL or
             DM_PELSWIDTH  or
             DM_PELSHEIGHT or
             DM_DISPLAYFREQUENCY;
 res := ChangeDisplaySettings(dev, CDS_TEST or CDS_FULLSCREEN);
 if res = DISP_CHANGE_SUCCESSFUL then
  ChangeDisplaySettings(dev, CDS_FULLSCREEN);
 end;
end
else
res := ChangeDisplaySettings(_devicemodeA(nil^), CDS_FULLSCREEN);

if res <> DISP_CHANGE_SUCCESSFUL then
begin
Log('ChangeDisplayMode: failed');
Exit;
end;

Result := true;
end;


Zacho   (2004-09-20 19:37:00) [2]

2 Кирилл ©  :
Хорошенько подумай, прежде чем делать такое. Например, если мне попадется такая программа, то она сразу же окажется в корзине.
Не лучше ли посмотреть в сторону DirectX ?


ssk   (2004-09-20 15:47:00) [3]

function SetResolution(Width, Height, Color: integer): Boolean;
var
 DeviceMode: TDevMode;
begin
 with DeviceMode do begin
   dmSize:=SizeOf(DeviceMode);
   dmBitsPerPel:=Color;
   dmPelsWidth:=Width;
   dmPelsHeight:=Height;
   dmFields:=DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT;
   result:=False;
   if ChangeDisplaySettings(DeviceMode,CDS_TEST or CDS_FULLSCREEN) <> DISP_CHANGE_SUCCESSFUL
    then Exit;
   Result:=ChangeDisplaySettings(DeviceMode,CDS_FULLSCREEN) = DISP_CHANGE_SUCCESSFUL;
 end;
end;

procedure RestoreDefaultResolution;
asm
 push CDS_FULLSCREEN
 push 0
 call ChangeDisplaySettings
end;


Наверх

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