Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Разрешение экрана   Найти похожие ветки 

 
S46E   (2005-11-10 16:37) [0]

Как поменять принудительно разрешение экрана на 1024x768? Частоту обновления?

Делаю текстовый квест с полноэкранным режимом.


 
Antonn ©   (2005-11-10 16:45) [1]

я так делал (передавай хендл окна, герцовку берет из настроек):

function SetFullscreenMode(_handle:HWND): Boolean;
var DeviceMode: TDevMode; DC: THandle; fre: integer;
begin
 with DeviceMode do
 begin
   DC   := GetDC(_handle);
   fre  := GetDeviceCaps(DC, VREFRESH);
   ReleaseDC(_handle, DC);
   dmSize := SizeOf(DeviceMode);
   dmBitsPerPel := 32;
   dmDisplayFrequency:=fre;
   dmPelsWidth := 640;
   dmPelsHeight := 480;
   dmFields := DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
   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 RestoreDefaultMode;
var T: TDevMode;
begin
 ChangeDisplaySettings(T, CDS_FULLSCREEN);
end;


 
S46E   (2005-11-13 17:01) [2]

Использую вот так:
procedure TForm1.FullScreen;
var
modes:array [0..255] of TDevMode;
dm: TDEVMODE;
q:integer;
maxF: Cardinal;
begin
maxF:=0;
DefH:=dm.dmPelsHeight;
DefW:=dm.dmPelsWidth;
DefF:=dm.dmDisplayFrequency;
ZeroMemory(@dm, sizeof(TDEVMODE));
dm.dmSize := sizeof(TDEVMODE);
dm.dmPelsWidth := 1024;
dm.dmPelsHeight := 768;
q:=0;
while EnumDisplaySettings(nil,q,Modes[q]) do
begin
 if (Modes[q].dmPelsHeight=768) and (Modes[q].dmPelsWidth=1024) then
 begin
   if Modes[q].dmDisplayFrequency>maxF then
   MaxF:=Modes[q].dmDisplayFrequency
 end;
Inc(q);
end;
dm.dmDisplayFrequency := MaxF;
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DisplayFrequency;
ChangeDisplaySettings(dm, 0);
end;

procedure TForm1.DefScreen;
var
dm: TDEVMODE;
begin
dm.dmPelsWidth := defW;
dm.dmPelsHeight := defH;
dm.dmDisplayFrequency := defF;
ZeroMemory(@dm, sizeof(TDEVMODE));
dm.dmSize := sizeof(TDEVMODE);
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DisplayFrequency;
ChangeDisplaySettings(dm, 0);
end;


Что делать с такими вещами как неправильное расположение окон программ при возращении в начальное разрешение( при DefScreen)? Как запустить FullScreen при активации окна после сворачивания?


 
Anatoly Podgoretsky ©   (2005-11-13 17:42) [3]

Делать так - пользователю вредить, для этого был изобретен DirectX


 
S46E   (2005-11-13 20:00) [4]

Вечно все сводится к чему-то не к тому к чему шел..на этом примере можно решить проблемы которые я описал?:)


 
Anatoly Podgoretsky ©   (2005-11-13 20:09) [5]

На этом примере можно испортить только рабочий стол пользователя как минимум.


 
XProger ©   (2005-11-14 02:50) [6]

Anatoly Podgoretsky, Все части Quake 2, 3; Doom 3 тоже портят? Сильно? Ужас какой... ;)

S46E, ты видимо и не проверял, что тебе насоветовали? А зря...


 
S46E   (2005-11-14 09:40) [7]

Проверил сразу же как написал тот пост..да, действительно круто=)
Остался вопрос как запустить SetFullscreenMode после активации окна после сворачивания.. OnActivate не срабатывает, кажется это не то что я думал..=)



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
3-1140605813
DelphiLexx
2006-02-22 13:56
2006.04.16
FIBDataSet - MasterDetail


2-1142760047
align
2006-03-19 12:20
2006.04.16
AdvStringGrid


2-1143885703
Dyakon_Frost
2006-04-01 14:01
2006.04.16
Проблемы с StringGrid


4-1138199340
Dyakon_Frost
2006-01-25 17:29
2006.04.16
Использование StartService


2-1143720079
dera
2006-03-30 16:01
2006.04.16
Как назыв. событие, когда прокручивать колесиком мышки?