![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FullSceen [Delphi, Windows]
SergProger © (2005-08-07 22:09:00)Всем огромный привет! Народ, скажите пожалуйста, как реализовать FullScreen в игре, не используя ни DelphiX, ни OpenGL, ни что нибудь другое, т.е. форма во весь экран и изменение разрешения экрана + возврат к предыдущему при minimize или наоборот. Заранее спасибо!
TButton (2005-08-11 05:41:00) [1]
> напрягись немного и поищи в модулях GLScene
>не используя ни DelphiX, ни OpenGL
Xeno (2005-08-09 05:42:00) [2]>SergProger
Блин, ну ты даёшь, напрягись немного и поищи в модулях GLScene,это-же травиальная задача,примеров в сети предостаточно...
XProger (2005-08-08 17:30:00) [3]SergProger, я тебе вроде ссылку давал...
SergProger (2005-08-08 14:23:00) [4]Xeno, спасибо, но при попытке откомпилировать он показал, что тип TResolution - undeclared identifier. Что делать? Какой модуль подключать?
Xeno (2005-08-08 05:56:00) [5]Var
BackHeight,BackWidth : Integer;
BackDCHeight,BackDCWidth : Integer;
...
function ChangeDisplayResolution(x, y,fDepth : Cardinal):Boolean;
var
DeviceMode : TDEVMODE;
begin
with DeviceMode do begin
dmSize:=SizeOf(DeviceMode);
dmBitsPerPel:=fDepth;
dmPelsWidth:=x;
dmPelsHeight:=y;
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 SetResolution(pForm : TForm;X,Y,Dp:integer;Active : Boolean);
Var res : TResolution;
tmpDevMode : TDevMode;
begin
if Active then begin
BackHeight := pForm.Height;
BackWidth := pForm.Width;
BackDCHeight := Screen.Height;
BackDCWidth := Screen.Width;
end;
if (x=0) and (y=0) then
begin
pForm.Height:= Screen.Height;
pForm.Width:= Screen.Width;
end else
if (x<>0) and (y<>0) then
begin
// res:=GetIndexFromResolution(x, y, cScreenDepthToBPP[sd32bits]);
res:=GetIndexFromResolution(x, y, Dp);
if res=0 then
raise Exception.Create('Unsupported video mode');
ChangeDisplayResolution(x,y,Dp);
pForm.Height:= Y;
pForm.Width:= X;
end;
if Active then begin
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_HIDE);
pForm.BorderStyle := bsNone;
pForm.Position := poDefault;
pForm.Cursor := crnone;
// Включение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
end else begin
ShowWindow(FindWindow('Shell_TrayWnd', nil), SW_SHOW);
pForm.BorderStyle := bsSingle;
pForm.Position := poDesigned;
// Выключение режима
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, 0, 0);
pForm.Height := BackHeight;
pForm.Width := BackWidth;
ChangeDisplayResolution(BackDCWidth,BackDCHeight,Dp);
end;
end;
....
SetResolution(800,600,16,true); // - установить режим 800x600x16
SetResolution(0,0,0,false); // - вернуть всё на место
MeF Dei Corvi (2005-08-08 04:54:00) [6]
> XProger © (07.08.05 22:21) [2]
Прогер, заметь "... формаво весь экран ", т.е. я думаю твои сырцы ему мало помогут...
XProger (2005-08-07 22:21:00) [7]http://xproger.mirg.ru/files/XTropper_src.rar
XTropper.dpr, l_gl.pas
P.S.
OpenGL не умеет разрешение менять (а это и не нужно ему)
grouzd[E]v (2005-08-07 22:12:00) [8]Гм.... Пардон, а как организовать это дело OGL'ом? Я вот всю жизню думал что тут WinAPI нужен....