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