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

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

Разрешение экрана [D7, WinXP]


S46E ©   (2005-11-10 16:37:00) 

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

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


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

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


XProger   (2005-11-14 02:50:00) [2]

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

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


Anatoly Podgoretsky   (2005-11-13 20:09:00) [3]

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


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

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


Anatoly Podgoretsky   (2005-11-13 17:42:00) [5]

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


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

Использую вот так:
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 при активации окна после сворачивания?


Antonn   (2005-11-10 16:45:00) [7]

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

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;


Наверх

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