Einzelnen Beitrag anzeigen

Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: Durch Auflösung nicht zentriert

  Alt 23. Feb 2006, 18:35
Ändern der Bildschirmauflösung:

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;
Wenn bei Frequency "0" angegeben wird setzt Win die passende (wenn möglich).
Es ist nicht gut einfach eine Vorzugeben, da auch TFT's nicht immer 1024x768 mit 6Hz 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); //<---<<<
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat