有关显示分辨率的小问题(100分)

  • 主题发起人 主题发起人 ylmboy
  • 开始时间 开始时间
Y

ylmboy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,我在程序中用以下代码对显示分辨率进行调整时,出现以下问题:<br>&nbsp; a 从600*480(系统原有分辨率)改成800*600后,windows状态栏没有随之<br>&nbsp; &nbsp; 移动,在屏幕中间显示。<br>&nbsp; b 同理800*600改成600*480后,windows状态栏无法找到。<br>&nbsp;不知如何解决?<br><br>&nbsp;function TForm1.DynamicResolution(X, Y: word): BOOL;<br>var<br>lpDevMode: TDeviceMode;<br>begin<br>Result := EnumDisplaySettings(nil, 0, lpDevMode);<br>if Result then<br>begin<br>lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;<br>lpDevMode.dmPelsWidth := X;<br>lpDevMode.dmPelsHeight := Y;<br>Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;<br>&nbsp;end<br>&nbsp;end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>if DynamicResolution(640, 480) then<br>ShowMessage('Now is 640*480');<br>end;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>if DynamicResolution(800, 600) then<br>ShowMessage('Now is 800*600');<br>end;<br>
 
NT4+SP6下非常正常。
 
我是win98;
 
NT4+sp5也正常。
 
win98正常
 
我的WIN98下怎么不正常?<br>看来任务条没有处理WM_DISPLAYCHANGE。<br>你可以 FindWindow('Shell_TrayWnd',nil), 然后设定它的位置。
 
sorry,以前正常,现在不对。<br>让我在试一下。
 
to O*O<br>&nbsp; 对不起,我对api不熟悉,自己试了试没明白,希望您再说清楚一些,谢谢
 
可以试试statusbar的anchor的bottom=true
 
将ChangeDisplaySettings(lpDevMode, 0)<br>改为ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY)就可以了。<br>
 
to o*o<br>&nbsp; <br>&nbsp; 谢谢,用您的方法解决了.<br>&nbsp; 想引深一下,如果有别的窗口存在,是否能同时不受影响(即由大变小时窗口超过<br>&nbsp; 屏幕范围,由小变大时窗口变小)?<br><br>to popeye<br>&nbsp; &nbsp;<br>&nbsp; 您指的是Delphi程序自带的状态栏?
 
to ylmboy:<br><br>不好办,可以EnumWindows,再调位置,但是太麻烦了。<br>Windows自带的QuickRes也没作到。
 
to o*o<br><br>&nbsp; 谢谢!<br>&nbsp; 再一个问题:当 FORM: BorderStyle--bsNone、WindowState--wsMaximized、<br>&nbsp; Windows状态栏为非自动隐藏模式时,运行无法使用Windows状态栏,而自动隐藏<br>&nbsp; 模式则可以使用?
 
WindowState设为wsNormal,<br>在Form的OnCreate里加上:<br>var r:TRect;<br>begin<br>&nbsp; SystemParametersInfo(SPI_GETWORKAREA,0,@r,0);<br>&nbsp; SetBounds(r.left,r.Top,r.Right,r.Bottom);<br>end;
 
to o*o &nbsp; &nbsp;<br><br>&nbsp; &nbsp;谢谢,用您的方法解决了.<br>&nbsp; &nbsp;想请您介绍您如何学习Windows API 的?youliming@sina.com<br>&nbsp; &nbsp;非常感谢您的帮助!
 
接受答案了.
 
后退
顶部