AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Windows API / MS.NET Framework API Delphi Wie kann ich die Bildschirmauflösung ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich die Bildschirmauflösung ändern?

Ein Thema von Daniel B · begonnen am 30. Jan 2003 · letzter Beitrag vom 30. Jan 2003
 
Daniel B
(Gast)

n/a Beiträge
 
#1

Wie kann ich die Bildschirmauflösung ändern?

  Alt 30. Jan 2003, 19:39
Delphi-Quellcode:
function AnotherScreen(Width, Height: Word): Boolean;
var
  lpDevMode: TDeviceMode;
begin
  Result := EnumDisplaySettings(nil, 0, lpDevMode);
  if Result then
  begin
    lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
    lpDevMode.dmPelsWidth := Width;
    lpDevMode.dmPelsHeight := Height;
    Result := ChangeDisplaySettings(lpDevMode,
      CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AnotherScreen(1024, 768); //Hier also die Auflösung eingeben
end;
Nachtrag:
Fox007 hat den Code soweit erweitert, das jetzt auch die Bildwiederholfrequenzauch gleich mit geändert wird.
Danke dafür! Und hier ist der geänderte Code.

Delphi-Quellcode:
function AnotherScreen(Width, Height: Word; Freq :Cardinal): Boolean;
var
  lpDevMode: TDeviceMode;
begin
  Result := EnumDisplaySettings(nil, 0, lpDevMode);
  if Result then
  begin
    lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY;
    lpDevMode.dmPelsWidth := Width;
    lpDevMode.dmPelsHeight := Height;
    lpDevMode.dmDisplayFrequency := Freq;
    Result := ChangeDisplaySettings(lpDevMode,
      CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AnotherScreen(1280, 1024, 85)
end;
Grüsse, Daniel


Von turboPASCAL kommt folgende erweiterte Version:

Delphi-Quellcode:
function ChangeRes(X, Y: Integer; Frequency: Byte; FullScreen: Boolean): Boolean;
var
  DevMode: TDeviceMode;
begin
  // Initialisieren
  EnumDisplaySettings(nil, 0, DevMode);
  DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
  DevMode.dmDisplayFrequency := Frequency;
  DevMode.dmPelsWidth := X;
  DevMode.dmPelsHeight := Y;

  // Auflösung ändern
  if FullScreen then
    Result := ChangeDisplaySettings(DevMode, CDS_FULLSCREEN) = DISP_CHANGE_SUCCESSFUL else
      Result := ChangeDisplaySettings(DevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end;

// Aufruf zB.:
begin
  //...
  If not ChangeRes(800, 600, 0, True) then
  begin
    MessageBox(0,
      'Das ändern der Auflösung ist fehlgeschlagen ...',
      'Fehler:', MB_OK or MB_ICONERROR);
    Exit;
  end;

  //...
  
  // Normale, in Windows eingestellte Bildschirmauflösung wiederherstellen:
  ChangeDisplaySettings(PDeviceMode(nil)^, 0);
end;
Beim Umschalten ohne Fullscreen werden die Fenster, die sich auf dem Desktop befinden, von Windows neu plaziert. Die Auflösung ist hierbei nicht temporär. Ist Fullscreen gewählt werden diese Fenster nicht neu positioniert und nur die Auflösung geändert. Das Umschalten der Auflösung ist hierbei nur temporär.

Wenn bei Frequency "0" angegeben wird, setzt Windows die passende Auflösung (wenn möglich).
Es ist nicht gut, einfach eine Auflösung vorzugeben, da auch TFT's nicht immer 1024 x 768 mit 60 Hz darstellen,
Die Frequenz muss man dan auch erst mittels GetDeviceCaps auslesen/bestimmen.

zB.:
Delphi-Quellcode:
  DC := GetDC(Handle);
  Bits := GetDeviceCaps(DC, BITSPIXEL);
  HRes := GetDeviceCaps(DC, HORZRES);
  VRes := GetDeviceCaps(DC, VERTRES);
  Freq := GetDeviceCaps(DC, VREFRESH); //<---<<<
[edit=Matze]Weitere Version hinzugefügt. Mfg, Matze[/edit]
  Mit Zitat antworten Zitat
 

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 22:39 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