Pisze mały prgoram w Delphi i mam pewien problem.
Chcę aby po uruchominiu mój program zmienił rozdzielczość ekranu na 800*600 a przy wyjściu z niego zmieniła na taką jak była przed uruchominiemem.
W SDK masz opis rekordu i funkcji do tego co potrzebujesz. Poszukaj 'resolution'.
A odczyt Screen.Width i Screen.Height.
Akurat piszę coś podobnego i mam kawałek kodu pod ręką:
procedure TForm1.FormCreate(Sender: TObject);
var
Rozd : packed record
X, Y : Integer;
end;
Mode: TDeviceMode;
begin
Rozd.X := GetSystemMetrics(SM_CXSCREEN); // pobranie rozdzielczosci w poziomie
Rozd.Y := GetSystemMetrics(SM_CYSCREEN); // pobranie rozdzielczosci w pionie
if (rozd.X <> 800) and (rozd.Y <> 600)
then
case
application.MessageBox('Program wygląda najlepiej w rozdzielczości 800x600. Można uuchomić go w wyższych rozdzielczościach, jednak nie zaleca się pracy przy niższych. Kliknij OK aby dostosować rozdzielczość albo ANULUJ aby uruchomić program w bieżącej rozdzieczości.','Wykryto nieoptymalną rozdzielczość ekranu',MB_OKCANCEL+MB_ICONWarning)
of IDOK: with Mode do
begin
dmSize:=SizeOf(Mode);
dmPelsWidth:=800;
dmPelsHeight:=600;
dmFields:=DM_PELSWIDTH+DM_PELSHEIGHT;
ChangeDisplaySettings(Mode,0)
end;
end; {case}
end;
Wszystko między wyrazami case i IDOK możesz pominąć. Co prawda program nie obsługuje przywracania rozdzielczości przy zamknięciu, ale można zapisać do zmiennych wartość po otwarciu i podpiąć analogiczną procedurę na OnClose formy.
Przetestowałem tą procdurę i wszystko ładnie działa aż do momentu ponownego uruchomienia systemu.
Co zrobić żeby rozdzielczość zmieniła się na stałe ?
....sory , nie dopisalem wszystkiego: po ponownym wlaczeniu komputera powraca stara rozdielczosc.
A, jak tak to w changedisplaysettings zamiast 0 wpisz CDS_UPDATEREGISTRY. Po więcej szczegółów odsyłam do hepla w Delphi, konkretnie help/windows sdk pod hasłem ChangeDisplaySettings; warto też ustawić częstotliwość odświeżania na wyższą