Autor Beitrag
Shasta2103
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win7
Delphi XE2
BeitragVerfasst: Di 25.09.07 22:54 
Hallo,

Ich verwende für mein Spiel folgende Funktion zum Ändern der Bildschirmauflösung.

ausblenden volle Höhe 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
       // erst testen, bevor wir umschalten!
       case ChangeDisplaySettings(DeviceMode, CDS_TEST) of
         // es wird klappen!
         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');

         // Nur Windows NT
         DISP_CHANGE_NOTUPDATED:
           Showmessage('Registry konnte nicht aktualisiert werden');
       else
         Result := True;
       end;
     end;
   Inc(i);
 end;

 if Result then
 begin
  //jetzt wird umgeschaltet
  ChangeDisplaySettings(DeviceMode, CDS_FULLSCREEN);

  //Mausgeschwindigkeit ändern
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

Win7
Delphi XE2
BeitragVerfasst: Di 25.09.07 23:08 
Ok das könnte es sein.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if Result then
 begin
  //jetzt wird umgeschaltet
  ChangeDisplaySettings(DeviceMode, CDS_FULLSCREEN);

  //Mausgeschwindigkeit ändern
  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?