Entwickler-Ecke

Multimedia / Grafik - Bildschirmauflösung ändern??


Beme - Do 15.05.03 13:15
Titel: Bildschirmauflösung ändern??
Hi Leute!
Hoffe ihr könnt mir helfen:
Wollte für jemand ein Programm machen, was ohne Prüfung + Rückmeldung die Bildschirmauflösung ändert.
Das Problem ist: bei mir (Win 98) gehts, bei demjenigen (mit WinXP) gehts nicht! :shock:
Aber das Programm hier aus dem FAQ (mit der Listbox) funktioniert auch bei ihm... Was hab ich falsch gemacht? Bzw. was fehlt damit es auch auf XP läuft?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
unit Unit2;

interface

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
 var  DevMode1    : TDeviceMode;
     liRetValue : Longint;
  begin
  devmode1.dmPelsWidth:=1024;
  devmode1.dmPelsHeight:=768;
  devmode1.dmBitsPerPel:=16;
  devmode1.dmDisplayFrequency:=85;
  devmode1.dmFields:=DM_BITSPERPEL+DM_PELSWIDTH+DM_PELSHEIGHT+dm_DisplayFrequency;
  liretvalue:=ChangeDisplaySettings (DevMode1, CDS_UPDATEREGISTRY);
  SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0);
  timer1.Enabled:=true;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
application.Terminate;

end;

end.


Simon Joker - Do 15.05.03 13:37

Hi

versuchs mal damit:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function NewRes(XRes, YRes, Depth, Freq: DWORD): Integer;
var
  DevMode: TDeviceMode;
begin
  EnumDisplaySettings(nil0, DevMode);
  DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BitsPerPel or DM_DISPLAYFREQENCY;
  DevMode.dmPelsWidth := XRes;
  DevMode.dmPelsHeight := YRes;
  DevMode.dmBitsPerPel:= Depth;
  DevMode.dmDisplayFrequency:=Freq;
  Result := ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);
end;

Werte den Rückgabe wert aus! Nur wenn DISP_CHANGE_SUCCESSFUL zurückgegeben wird ist alles in Ordnung.
Für die:
DISP_CHANGE_RESTART The computer must be restarted in order for the graphics mode to work.
DISP_CHANGE_BADFLAGS An invalid set of flags was passed in.
DISP_CHANGE_FAILED The display driver failed the specified graphics mode.
DISP_CHANGE_BADMODE The graphics mode is not supported.
DISP_CHANGE_NOTUPDATED Windows NT only: Unable to write settings to the registry.
gib eine Entsprechende Meldung aus, bevor du das Programm benedest.

Und beende es nicht mit Terminate sondern mit Close.


Beme - Mo 19.05.03 08:00

Danke, klappt wunderbar 8)