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

Вниз

Проблемы с изменением разрешения экрана (Delphi 5)   Найти похожие ветки 

 
Good Man ©   (2002-06-04 21:49) [0]

Создаю простое мультимедийное приложение. Вся анимация завязана с 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) [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;



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

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

Наверх




Память: 0.47 MB
Время: 0.012 c
8-8077
Татар2000
2002-06-06 09:33
2002.10.03
Простейщая анимация


7-8188
REL_
2002-07-26 10:12
2002.10.03
Серийный номер винчестера


4-8232
Eugene_Jek_Efimochkin
2002-08-18 00:43
2002.10.03
перерисовка заголовка


8-8071
ArochGL
2002-06-05 08:13
2002.10.03
TGA format


1-8023
SSAlex
2002-09-19 00:53
2002.10.03
OnKeyPress