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

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

Проблемы с изменением разрешения экрана (Delphi 5) [D5]


Good Man ©   (2002-06-04 21:49:00) 

Создаю простое мультимедийное приложение. Вся анимация завязана с TСanvas и BMP-файлами. Для максимального использования площади экрана, диалоговое окно создаю размером 1024 на 768 пикселей.

Что бы избежать проблем с масштабированием диалогового мультимедийного окна (т.к. BMP – рисунки имеют определенный размер) - делаю форму с фиксированным размером 1024 на 768 пикселей.

У пользователей может быть какое угодно разрешение и поэтому перед запуском приложения необходимо изменит экранное разрешение к 1024 х 768.

Когда приложение закрывается или минимизируется – первоначальное экранное разрешение необходимо восстановить.

Процедура изменения разрешения выглядит так:

function SetFullscreenMode:Boolean;
var DeviceMode : TDevMode;
begin
with DeviceMode do begin
dmSize:=SizeOf(DeviceMode);
dmBitsPerPel:=16;
dmPelsWidth:=1024;
dmPelsHeight:=768;
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 RestoreDefaultMode;
var T : TDevMode absolute 0;
begin
ChangeDisplaySettings(T,CDS_FULLSCREEN);
end;

Задача по началу кажется простой?

Покажу свой глючный вариант решения:

//форма загружается или становится активной
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
if (NewHeight <> 768) or (NewWidth <> 1024) then
begin
SetFullscreenMode;
end;

end;

//форма закрывается – изменяем возвращаем первоначальное разрешение
procedure TForm1.FormDestroy(Sender: TObject);
begin
RestoreDefaultMode;
end;

…
{ Public declarations }
protected Procedure WMGetSysCommand(var Message : TMessage); message WM_SYSCOMMAND;
…

//при минимизации формы – восстанавливаю первоначальное разрешение
Procedure TForm1.WMGetSysCommand(var Message : TMessage) ;
begin
if (Message.wParam = SC_MINIMIZE) then
begin
ShowWindow(application.handle, SW_MINIMIZE);
RestoreDefaultMode;
end
else if (Message.wParam = SC_MAXIMIZE) then
begin
SetFullscreenMode;
ShowWindow(application.handle, SW_MAXIMIZE);
end
else if (Message.wParam = SC_CLOSE) then
begin
Form1.Close();
end
end;

ПРОБЛЕМА:
Если форму свернуть предыдущее разрешение восстанавливается. Если ее затем развернуть разрешение становится 1024 на 768, но форма не разворачивается полностью на экран.

Мне очень нужна ваша помощь!


Good Man   (2002-06-04 23:30:00) [1]

Проблема решена. Необходимо в обработчик события FormCanResize добавить следующий код:

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
if (NewHeight <> 768) or (NewWidth <> 1024) then
begin

SetFullscreenMode;
NewHeight := 768;
NewWidth := 1024;

end;
end;


Наверх

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