Uses
ShellAPI,
registry;
// auch wenn du es nicht wolltest, nun hast doch ein wenig Registry mit drinne - aber nur lesen...
....
Var
ScreenAlt: TPoint;
// diese solltest du schon haben
ScreenAltFrequenz : Integer;
// diese kommt neu hinzu
Function ChangeScreen(AWidth, AHeight: Word; AFrequenz: Integer;
Const APfad:
string): Boolean;
// modified by Muetze1
Const
ENUM_CURRENT_SETTINGS : Cardinal = Cardinal(-1);
//$ffffffff; // = -1
Var
lpDevMode: TDeviceMode;
saveiconherstellen: boolean;
lRegInfo : TRegistry;
Begin
saveiconherstellen := false;
If ( AWidth <> 0 )
Then
Begin
ScreenAlt.x := Screen.Width;
ScreenAlt.y := Screen.Height;
ScreenAltFrequenz := 0;
// diese Variable noch definieren
If ( EnumDisplaySettings(
Nil, ENUM_CURRENT_SETTINGS, lpDevMode) )
Then
Begin
If ( ( lpDevMode.dmFields
And DM_PELSWIDTH ) > 0 )
Then
ScreenAlt.x := lpDevMode.dmPelsWidth;
If ( ( lpDevMode.dmFields
And DM_PELSHEIGHT ) > 0 )
Then
ScreenAlt.y := lpDevMode.dmPelsHeight;
If ( ( lpDevMode.dmFields
And DM_DISPLAYFREQUENCY ) > 0 )
Then
ScreenAltFrequenz := lpDevMode.dmDisplayFrequency
Else If ( Win32Platform = VER_PLATFORM_WIN32_WINDOWS )
Then // Win9x/ME
Begin
lRegInfo := TRegistry.Create(KEY_READ);
lRegInfo.RootKey := HKEY_CURRENT_CONFIG;
Try
If lRegInfo.OpenKey('
\Display\Settings', False)
Then
Begin
ScreenAltFrequenz := StrToIntDef(lRegInfo.ReadString('
RefreshRate'), 0);
End;
Finally
lRegInfo.CloseKey;
lRegInfo.Free;
End;
End;
End;
ShellExecute(0, '
open', PChar(APfad + '
saveicon.exe'),'
"\s"',
nil, SW_Show);
Sleep(1000);
End
Else
Begin
saveiconherstellen:=true;
AWidth := ScreenAlt.X;
AHeight := ScreenAlt.Y;
AFrequenz := ScreenAltFrequenz;
End;
lpDevMode.dmFields := DM_PELSWIDTH
Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := AWidth;
lpDevMode.dmPelsHeight := AHeight;
If ( AFrequenz > 20 )
Then // valid?
Begin
lpDevMode.dmDisplayFrequency := AFrequenz;
lpDevMode.dmFields := lpDevMode.dmFields
Or DM_DISPLAYFREQUENCY;
End;
Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;
If saveiconherstellen
Then
ShellExecute(0,'
open', PChar(APfad + '
saveicon.exe'),'
"\r"',
nil, SW_Show);
If Not Result
Then
Begin
MessageBeep(MB_ICONERROR);
MessageDlg('
Fehler1' +#10#10+ '
Das Programm konnte die Auflösung nicht auf '+inttostr(AWidth)+'
x'+inttostr(AHeight)+ '
umstellen.' +#10+ '
Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ '
Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ '
dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0);
Application.Terminate;
End;
End;