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
49
50
51
52
53
54
55
56
57
58
59
| Lparameters lnWidth, lnHeight
If Pcount() # 2
If Vartype(_Screen.LastWidth)="U"
Return
Else
lnWidth=_Screen.LastWidth
lnHeight=_Screen.lastHeight
Endif
Endif
Clear
#Define ENUM_CURRENT_SETTINGS -1
#Define CDS_UPDATEREGISTRY = 0x01
#Define CDS_TEST 0x02
#Define DISP_CHANGE_SUCCESSFUL 0
#Define DISP_CHANGE_RESTART 1
#Define DISP_CHANGE_FAILED -1
#Define DM_PELSWIDTH 0x00080000
#Define DM_PELSHEIGHT 0x00100000
Declare Integer EnumDisplaySettings In win32API ;
string deviceName,;
integer modeNum, ;
string @ lpdevMode
Declare Long ChangeDisplaySettings In win32API ;
string lpDevMode, ;
integer dwflags
lpdevMode = Replicate(Chr(0),512)
EnumDisplaySettings(0,ENUM_CURRENT_SETTINGS,@lpdevMode)
* Save previous resolution
_Screen.AddProperty("LastWidth",CToBin(Substr(m.lpdevMode,109,4),"4RS"))
_Screen.AddProperty("LastHeight",CToBin(Substr(m.lpdevMode,113,4),"4RS"))
* Check if not the same, no use to change when the same
If _Screen.LastWidth # m.lnWidth or _Screen.LastHeight # m.lnHeight
Wait Window "Ekran çözünürlüğü ayarlanıyor..." At Srows()/2,Scols()/2-10 Nowait
lpdevMode = Stuff(m.lpdevMode,41,4,BinToC(DM_PELSWIDTH+DM_PELSHEIGHT,"4RS"))
lpdevMode = Stuff(m.lpdevMode,109,4,BinToC(lnWidth,"4RS"))
lpdevMode = Stuff(m.lpdevMode,113,4,BinToC(lnHeight,"4RS"))
result = ChangeDisplaySettings(m.lpdevMode,CDS_TEST)
If !( result = DISP_CHANGE_SUCCESSFUL )
*Wait Window "Mode not supported." Timeout 1
Return .F.
Else
ChangeDisplaySettings(m.lpdevMode,0)
Endif
Endif
Return
Endfunc
*!* Source Code From Cetin BASOZ
*!* To use it, just place it somewhere in your app like this:
*!* ChangeRes(1024,768)
*!* That means I am forcing the screen to have a resolution of 1024x768. When I exit my main form, in the unload event I place this:
*!* ChangeRes(_Screen.LastWidth,_Screen.lastHeight)
*!* And that would restore the previous screen resolution. |