Entwickler-Ecke
Windows API - Bildschirmauflösung ändern funktioniert nicht!
Shasta2103 - Di 25.09.07 22:54
Titel: Bildschirmauflösung ändern funktioniert nicht!
Hallo,
Ich verwende für mein Spiel folgende Funktion zum Ändern der Bildschirmauflösung.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| function ChangeResolution(sizex, sizey, bpp: DWORD): Boolean; var DeviceMode: TDeviceModeA; i: Integer; nMouseSpeed: Cardinal; begin i := 0; Result := False; while EnumDisplaySettings(nil, i, DeviceMode) do begin with DeviceMode do if (dmPelsWidth = sizex) and (dmPelsHeight = SizeY) and (dmBitsPerPel = bpp) then begin case ChangeDisplaySettings(DeviceMode, CDS_TEST) of DISP_CHANGE_SUCCESSFUL: Result := True;
DISP_CHANGE_RESTART: Showmessage('Neustart erforderlich');
DISP_CHANGE_BADFLAGS: Showmessage('Ungültige Bildschirmeinstellungen');
DISP_CHANGE_FAILED: Showmessage('Auflösung konnte nicht geändert werden');
DISP_CHANGE_BADMODE: Showmessage('Bildschirm unterstützt diese Auflösung nicht');
DISP_CHANGE_NOTUPDATED: Showmessage('Registry konnte nicht aktualisiert werden'); else Result := True; end; end; Inc(i); end;
if Result then begin ChangeDisplaySettings(DeviceMode, CDS_FULLSCREEN);
nMouseSpeed:=8; SystemParametersInfo(SPI_SETMOUSESPEED, 0, Pointer(nMouseSpeed), SPIF_SENDCHANGE); end; end; |
Das Spiel hat eine Auflösung von 1024x768.
Auf meinem Pc funktioniert diese Funktion einwandfrei.
Ich lasse mein Spiel jedoch gerade von einigen Leuten testen und bei ihnen startet das Spiel in einer
Auflösung von 640x480 & Farbtiefe von 8Bit oder es kommt zum totalen Wirrwarr.
Es ist also unspielbar. Ich kann es leider auch nur anhand ihrer Erzählungen beschreiben.
Ihre Systeme unterstützen auf jeden Fall diese Auflösung!
Ich wäre froh, wenn ihr mir weiterhelfen könntet.
arj - Di 25.09.07 23:03
Wenn ich das richtig gesehen hab, dann nimmst du immer die letzte noch funktionierende Auflösung die
EnumDisplaySettings liefert und verwendest diese.
Wer sagt dir aber, dass EnumDisplaySettings diese aufsteigend liefert?
Shasta2103 - Di 25.09.07 23:08
Ok das könnte es sein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if Result then begin ChangeDisplaySettings(DeviceMode, CDS_FULLSCREEN);
nMouseSpeed:=8; SystemParametersInfo(SPI_SETMOUSESPEED, 0, Pointer(nMouseSpeed), SPIF_SENDCHANGE); end; |
Ich hatte diesen Teil vorher oben drin stehen, so wie man die Funktion überall findet, nur leider
hat er statt alle Auflösung NUR zu testen (CDS_TEST), jede einzelne durchgeschalten,
was ungefähr ne halbe minute gedauert hat und absolut nervig war. Sollte das so sein?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!