如何修改第二块屏幕的分辨率?不是第一块哦
显卡有双头,可以在第二个头显示屏幕2的内容。程序里面需要控制屏幕2的分辨率,从桌面-属性-设置-屏幕分辨率里可以手工设置。
我的代码:
function ChgDisplaySetting():Boolean;
var
DevMode:TDeviceMode;
dd:TDisplayDevice;
ScreenNo:Integer;
ret:Boolean;
begin
// ScreenNo:=0;
// repeat
// ZeroMemory(@dd,SizeOf(TDisplayDevice));
// dd.cb := SizeOf(TDisplayDevice);
// ret := EnumDisplayDevices(nil,ScreenNo,dd,0);
// Form1.Memo1.Lines.Add(dd.DeviceName);
// Form1.Memo1.Lines.Add(dd.DeviceString);
// Form1.Memo1.Lines.Add('--------------------');
// Inc(ScreenNo);
// until not ret;
ScreenNo:=1;
ZeroMemory(@dd,SizeOf(TDisplayDevice));
dd.cb := SizeOf(TDisplayDevice);
ret := EnumDisplayDevices(nil,ScreenNo,dd,0);
ZeroMemory(@DevMode,Sizeof(TDeviceMode));
DevMode.dmSize := Sizeof(TDeviceMode);
Result := EnumDisplaySettings(dd.DeviceName,4294967295-1,DevMode);
if Result then
begin
DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFLAGS;
DevMode.dmPelsWidth := 800;
DevMode.dmPelsHeight := 600;
StrPCopy(DevMode.dmDeviceName,dd.DeviceName);
Result := ChangeDisplaySettingsEx(dd.DeviceName,DevMode,0,CDS_NORESET or CDS_UPDATEREGISTRY,0)=DISP_CHANGE_SUCCESSFUL;
//ChangeDisplaySettings(DevMode,0);
end;
end;
代码不管怎么改,修改的总是第一块屏幕的分辨率,不知道哪个地方没写对。希望大家指点一下。
[解决办法]
dd.DeviceName这个参数的值可能有问题
[解决办法]
ScreenNo:=1;
[解决办法]
这句
Result := ChangeDisplaySettingsEx(dd.DeviceName,DevMode,0,CDS_NORESET or CDS_UPDATEREGISTRY,0)=DISP_CHANGE_SUCCESSFUL;
改为:
Result := ChangeDisplaySettingsEx(dd.DeviceName,DevMode,0,0,nil)=DISP_CHANGE_SUCCESSFUL;
我一直这样用的,没明白后面的参数
[解决办法]
既然你都知道了,不妨帖出来,跟大家共享一下
我最近也在搞双屏展示,但是目前遇到一些困难,
[解决办法]
mark,等结贴再看
[解决办法]
firstly you need to check if display is attached to desktop .
secondly
DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_POSITION or DM_DISPLAYFLAGS
[解决办法]
这个是我写的改分辨率、刷新率的方法,可以改屏幕1或屏幕2,下面是改屏幕2分辨率及刷新率的调用。
configmonitor('\\.\Display2',1024,768,85);
procedure Tfmcontrol.configmonitor(smonitor: pchar; monitor_x,monitor_y,frequency: integer);
var
DevMode:TDeviceMode;
begin
EnumDisplaySettings(smonitor,Cardinal(-1),DevMode);
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT OR DM_DISPLAYFREQUENCY;
DevMode.dmPelsWidth:=monitor_x;
DevMode.dmPelsHeight:=monitor_y;
DevMode.dmDisplayFrequency:= Cardinal(frequency);
ChangeDisplaySettingsex(smonitor,DevMode,0,CDS_FULLSCREEN,0)
end;