显卡有双头,可以在第二个头显示屏幕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;代码不管怎么改,修改的总是第一块屏幕的分辨率,不知道哪个地方没写对。希望大家指点一下。
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;代码不管怎么改,修改的总是第一块屏幕的分辨率,不知道哪个地方没写对。希望大家指点一下。
解决方案 »
- 寻找Delphi表格组件,请高手推荐!!!!
- 如何在windows"开始-程序"菜单中添加和删除菜单项?高分送!
- 菜鸟问:installsheild和installshield是一种软件吗?
- 请问在DELPHI在已定义了一个热键但程序出错自动退出了没有热行关闭热键那怎办?
- 如何利用Image资源
- 关于带有抽象方法的类
- 急救!!各位大哥,救救小弟!!
- 建议:.........即将去南京参加这次的人才交流会(为找工作),请在南京的或熟悉南京的朋友给点建议(来者有分)
- BDE连接不了?
- "select disctinct name from customer" 在ADOQuery 中连接ACCESS2000不能用吗?BDE中用QUERY没有问题
- 对TRichEdit对象发送了EM_SETCHARFORMAT消息后的苦恼
- C/S程序
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;我一直这样用的,没明白后面的参数
secondly
DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_POSITION or DM_DISPLAYFLAGS
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;