AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Auflösung,Frequenz,Icons wiederherstellen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Auflösung,Frequenz,Icons wiederherstellen ?

Ein Thema von Vader · begonnen am 26. Dez 2005 · letzter Beitrag vom 6. Jan 2006
Antwort Antwort
Seite 3 von 3     123   
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#21

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 4. Jan 2006, 15:21
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
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#22

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 5. Jan 2006, 14:07
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:
// ------------------------------------------------------------------------------ // 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;
Danke an alle die mir geholfen haben diesen Quellcode Fertig zu stellen!!


mfg,
Ferby
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#23

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 5. Jan 2006, 14:25
Von der Methode mit dem GetDeviceCaps() kann ich dir nur abraten, da er vielmals einen falschen Wert bzw. 0 zurück liefert.
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#24

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 5. Jan 2006, 14:33
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#25

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 5. Jan 2006, 14:41
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 von MSDN GetDeviceCaps(VREFRESH):
Windows NT/2000/XP: For display devices: the current vertical refresh rate of the device, in cycles per second (Hz).

A vertical refresh rate value of 0 or 1 represents the display hardware's default refresh rate. This default rate is typically set by switches on a display card or computer motherboard, or by a configuration program that does not use display functions such as ChangeDisplaySettings.
Mit anderen Worten:

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.
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#26

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 5. Jan 2006, 16:22
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#27

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 5. Jan 2006, 23:00
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;
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#28

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 6. Jan 2006, 12:57
Hi,


Ich schau mir deine Funktion später mal ein wenig an und probier sie aus,
danke,



Ferby
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#29

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 6. Jan 2006, 23:34
Hallo,

bei mir kommt der Fehler zur Zeile

lpDevMode.dwSize := SizeOf(lpDevMode);


[Fehler] Ferby.pas(77): Undefinierter Bezeichner: 'dwSize'
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#30

Re: Auflösung,Frequenz,Icons wiederherstellen ?

  Alt 6. Jan 2006, 23:47
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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz