Articles   Members Online:
-Article/Tip Search
-News Group Search over 21 Million news group articles.
-Delphi/Pascal
-CBuilder/C++
-C#Builder/C#
-JBuilder/Java
-Kylix
Member Area
-Home
-Account Center
-Top 10 NEW!!
-Submit Article/Tip
-Forums Upgraded!!
-My Articles
-Edit Information
-Login/Logout
-Become a Member
-Why sign up!
-Newsletter
-Chat Online!
-Indexes NEW!!
Employment
-Build your resume
-Find a job
-Post a job
-Resume Search
Contacts
-Contacts
-Feedbacks
-Link to us
-Privacy/Disclaimer
Embarcadero
Visit Embarcadero
Embarcadero Community
JEDI
Links
How to retrieve and change display settings Turn on/off line numbers in source code. Switch to Orginial background IDE or DSP color Comment or reply to this aritlce/tip for discussion. Bookmark this article to my favorite article(s). Print this article
10-Oct-02
Category
Win API
Language
Delphi 2.x
Views
55
User Rating
No Votes
# Votes
0
Replies
0
Publisher:
DSP, Administrator
Reference URL:
DKB
			 Author: Jonas Bilinkevicius

I can't find a way to enumerate or test display frequencies. When I use 
ChangeDisplaySettings to test for a given mode it returns DISP_CHANGE_SUCCESSFUL, 
no matter what I put in for dmDisplayFrequency. Should I just attempt to set a good 
median freq such as 75Hz and forget about it? Any other ideas?

Answer:

1   type
2     PdmArray = ^TDmArray;
3     TDmArray = array[0..0] of TDeviceMode;
4   
5     TForm1 = class(TForm)
6       { ... }
7     private
8       lpDmArray: PDmArray;
9       NumModes: integer;
10      BitsPerPixel: DWord;
11      RefreshRate: DWord;
12      CurrentDisplayMode: integer;
13      SelectedDisplayMode: integer;
14      { ... }
15    public
16    end;
17  
18  procedure TForm1.RetrieveDisplayModes;
19  var
20    I: Integer;
21    MoreModes: Bool;
22    dm: TDeviceMode;
23  begin
24    StringGridDisplayModes.ColCount := 5;
25    StringGridDisplayModes.RowCount := 2;
26    StringGridDisplayModes.Cells[0, 0] := 'Mode';
27    StringGridDisplayModes.Cells[1, 0] := 'Resulution';
28    StringGridDisplayModes.Cells[2, 0] := 'Bits per Pixel (Colors)';
29    StringGridDisplayModes.Cells[3, 0] := 'DisplayFrequency';
30    StringGridDisplayModes.Cells[4, 0] := 'DeviceName';
31    for I := 0 to StringGridDisplayModes.ColCount do
32      StringGridDisplayModes.Cells[I, 1] := '';
33    MoreModes := TRUE;
34    I := 0;
35    while MoreModes do
36    begin
37      MoreModes := EnumDisplaySettings(nil, I, dm);
38      StringGridDisplayModes.Cells[0, StringGridDisplayModes.RowCount - 1] :=
39        IntToStr(I);
40      StringGridDisplayModes.Cells[1, StringGridDisplayModes.RowCount - 1] :=
41        IntToStr(dm.dmPelsWidth) + ' * ' + IntToStr(dm.dmPelsHeight);
42      StringGridDisplayModes.Cells[2, StringGridDisplayModes.RowCount - 1] :=
43        IntToStr(dm.dmBitsPerPel);
44      StringGridDisplayModes.Cells[3, StringGridDisplayModes.RowCount - 1] :=
45        IntToStr(dm.dmDisplayFrequency);
46      StringGridDisplayModes.Cells[4, StringGridDisplayModes.RowCount - 1] :=
47        dm.dmDeviceName;
48      if (dm.dmPelsWidth = Screen.Width) and (dm.dmPelsHeight = Screen.Height) and
49        (dm.dmBitsPerPel = BitsPerPixel) and (dm.dmDisplayFrequency = RefreshRate) 
50  then
51        CurrentDisplayMode := I;
52      StringGridDisplayModes.RowCount := StringGridDisplayModes.RowCount + 1;
53      Inc(i);
54    end;
55    StringGridDisplayModes.RowCount := StringGridDisplayModes.RowCount - 1;
56    NumModes := I;
57    GetMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
58    FillChar(lpDmArray^, sizeof(TDeviceMode) * NumModes, #0);
59  
60  {$IFOPT R+}
61  {$DEFINE CKRANGE}
62  {$R-}
63  {$ENDIF}
64  
65    for I := 0 to (NumModes - 1) do
66      EnumDisplaySettings(nil, I, lpDmArray[i]);
67  
68  {$IFDEF CKRANGE}
69  {$UNDEF CKRANGE}
70  {$R+}
71  {$ENDIF}
72  
73  end;
74  
75  procedure TForm1.ButtonRetrieveDisplayModesClick(Sender: TObject);
76  begin
77    RetrieveDisplayModes;
78  end;
79  
80  procedure TForm1.FormDestroy(Sender: TObject);
81  begin
82    try
83      FreeMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
84    except
85    end;
86  end;
87  
88  procedure TForm1.FormCreate(Sender: TObject);
89  var
90    DC: hDC;
91  begin
92    DC := GetDC(0);
93    BitsPerPixel := GetDeviceCaps(DC, BITSPIXEL);
94    RefreshRate := GetDeviceCaps(DC, VREFRESH);
95    ReleaseDC(0, DC);
96    StatusBar.Panels[2].Text := 'Resolution: ' + IntToStr(Screen.Width) + ' * ' +
97      IntToStr(Screen.Height)
98      + ', ColorDept: ' + IntToStr(BitsPerPixel) + ', RefreshRate: '
99      + IntToStr(RefreshRate);
100   ButtonRetrieveDisplayModesClick(Sender);
101 end;
102 
103 procedure Tform1.SetDisplayMode(Mode: integer);
104 var
105   ReturnVal: LongInt;
106 begin
107 
108 {$IFOPT R+}
109 {$DEFINE CKRANGE}
110 {$R-}
111 {$ENDIF}
112 
113   ReturnVal := ChangeDisplaySettings(lpDmArray[Mode], CDS_UPDATEREGISTRY);
114 
115 {$IFDEF CKRANGE}
116 {$UNDEF CKRANGE}
117 {$R+}
118 {$ENDIF}
119 
120   if ReturnVal <> DISP_CHANGE_SUCCESSFUL then
121     case ReturnVal of
122       DISP_CHANGE_SUCCESSFUL: ShowMessage('DISP_CHANGE_SUCCESSFUL');
123       DISP_CHANGE_RESTART: ShowMessage('DISP_CHANGE_RESTART');
124       DISP_CHANGE_BADFLAGS: ShowMessage('DISP_CHANGE_BADFLAGS');
125       DISP_CHANGE_FAILED: ShowMessage('DISP_CHANGE_FAILED');
126       DISP_CHANGE_BADMODE: ShowMessage('DISP_CHANGE_BADMODE');
127       DISP_CHANGE_NOTUPDATED: ShowMessage('DISP_CHANGE_NOTUPDATED');
128     end;
129 end;


			
Vote: How useful do you find this Article/Tip?
Bad Excellent
1 2 3 4 5 6 7 8 9 10

 

Advertisement
Share this page
Advertisement
Download from Google

Copyright © Mendozi Enterprises LLC