![]() |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Hallo,
exisitiert bei dir auch die Datei APfad + 'saveicon.exe' ??? Bei mir war der Pfad falsch, aber es kam keine Fehlermeldung, so bin ich auch erst relativ spät drauf gekommen das der Pfad gar nicht richtig war... Ferby |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Hallo,
@ Vader Das kann ich erklären. Bei der Setup datei istdie Variabel pfad als Constante ss definiert: const pfad='C:\Programme\Ferby\Ferby-Fall_II\data\'; aber bei der Zip datei habe ich die exe neu gemacht mit einen anderen pfad, und zwar so: const pfad='data\'; deshalb funktionierts, egal wo du das Spiel entpackst. ------- Noch was zur Auflösung ändern und zur Frquenz wieder herstellen, Ich habe jetzt meinen eigenen Quellcode erweitert, er ändert die Auflösung und nacher stellt er die alte Auflösung, Bildschirmfrequenz und Desktopsymbole wieder her:
Delphi-Quellcode:
Danke an alle die mir geholfen haben diesen Quellcode Fertig zu stellen!!
// ------------------------------------------------------------------------------ // Screen // ---------------------------------
function changescreen(Width, Height: Word; pfad: string): Boolean; var lpDevMode: TDeviceMode; saveiconherstellen: boolean; begin saveiconherstellen:=false; if width<>0 then begin ScreenAlt.x:=(screen.width); ScreenAlt.y:=(screen.height); refreshalt:=getrefresH; ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\s"', nil, SW_Show); sleep(1000); end else begin saveiconherstellen:=true; width:=ScreenAlt.X; height:=ScreenAlt.Y; end; Result := EnumDisplaySettings(nil, 0, lpDevMode); if Result then begin lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT; lpDevMode.dmPelsWidth := Width; lpDevMode.dmPelsHeight := Height; lpDevMode.dmDisplayFrequency := refreshAlt; lpDevMode.dmFields := lpDevMode.dmFields Or DM_DISPLAYFREQUENCY; Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL; if saveiconherstellen then ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\r"', nil, SW_Show); end; if not Result then begin MessageBeep(MB_ICONERROR); MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(width)+'x'+inttostr(height)+ ' 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; function GetRefresh : Integer; var hDC : Cardinal; begin hDC := GetDC(0); Result := GetDeviceCaps(hDC, VREFRESH); ReleaseDC(0, hDC); end; mfg, Ferby |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Von der Methode mit dem GetDeviceCaps() kann ich dir nur abraten, da er vielmals einen falschen Wert bzw. 0 zurück liefert.
|
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Hallo,
ich habe das auf 3 Laptops und 1 Computer mit Windows XP und 2000 getestet und es hat funktioniert. Wieso sollte es falsche Werte zurückliefern???? Ferby |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Probier es z.B. mal unter Windows 9x und vor allem auch mal mit SiS Grafikkartentreibern und bei alten ATI Grafikkarten und deren Treiber (Rage Pro z.B.).
/EDIT: Ansonsten nochmal dazu die MSDN: Zitat:
a) Windows 9x ist komplett aussen vor, funktioniert also gar nicht. b) Eine Rückgabe von 0 oder 1 für die "default refresh rate" würde ChangeDisplaySettings() beim zurücksetzen nicht akzeptieren. EnumDisplaySettings() selber kann dabei auch 0 bzw. 1 für die "default refresh rate" zurück liefern, aber beim setzen aktzeptiert es ChangeDisplaySettings() nicht - bzw. es ist nicht dokumentiert. Daher kann es dir ein Treiber von einem Hersteller leicht um die Ohren hauen. |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Hallo,
wie würdest du die Bildschirmfrequenz rausbekommen?? Ich habe mir deinen verbesserten Quellcode von mir schon angesehen, leider durchschau ich ihn nicht ganz. Kannst du mir die Bereiche Isolieren die nur zum Auslesen der Bildschirmfrequenz verwendet werden?? Ferby |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Delphi-Quellcode:
Function GetVRefresh: Integer;
Const ENUM_CURRENT_SETTINGS : Cardinal = Cardinal(-1);//$ffffffff; // = -1 Var lpDevMode: TDeviceMode; lRegInfo : TRegistry; lRefresh : Integer; lDesktop : HDC; Begin lRefresh := 0; FillChar(lpDevMode, SizeOf(lpDevMode), 0); lpDevMode.dwSize := SizeOf(lpDevMode); If ( EnumDisplaySettings(Nil, ENUM_CURRENT_SETTINGS, lpDevMode) ) Then Begin If ( ( lpDevMode.dmFields And DM_DISPLAYFREQUENCY ) > 0 ) Then lRefresh := 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 lRefresh := StrToIntDef(lRegInfo.ReadString('RefreshRate'), 0); End; Finally lRegInfo.CloseKey; lRegInfo.Free; End; End; End; If ( lRefresh In [0,1] ) Then // hardware default versuchen zu umgehen Begin lDesktop := GetDC(0); Try lRefresh := GetDeviceCaps(lDesktop, VREFRESH); Finally ReleaseDC(0, lDesktop); End; End; Result := lRefresh; End; |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Hi,
Ich schau mir deine Funktion später mal ein wenig an und probier sie aus, danke, Ferby |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Hallo,
bei mir kommt der Fehler zur Zeile lpDevMode.dwSize := SizeOf(lpDevMode); [Fehler] Ferby.pas(77): Undefinierter Bezeichner: 'dwSize' |
Re: Auflösung,Frequenz,Icons wiederherstellen ?
Wenn man einmal was aus'm Kopf schreibt....
... es heisst natürlich nicht "dwSize" sondern "dmSize" - aber das kann ich nun nach 24 Stunden nicht mehr korrigeren... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz