Форум: "Media";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
ВнизПроблемы с изменением разрешения экрана (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 вся ветка
Форум: "Media";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c