这段代码是从网上搜到的 不知道对楼主有没有用 type disr=record w,h,c:integer; end; var Form1: TForm1; dis:_devicemodea; disr_a:array[0..120] of disr; implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin dis.dmSize:=sizeof(dis); dis.dmPelsWidth:=disr_a[listbox1.ItemIndex].w; dis.dmPelsHeight:=disr_a[listbox1.ItemIndex].h; dis.dmBitsPerPel:=disr_a[listbox1.ItemIndex].c; dis.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL; ChangeDisplaySettingsa(dis,CDS_UPDATEREGISTRY);//设置当前的分辨率
end;
procedure TForm1.Button2Click(Sender: TObject); var pdis:_display_device; i:integer; begin combobox1.Clear; for i:=0 to 10 do begin pdis.cb:=sizeof(pdis); if enumdisplaydevices(nil,i,pdis,0)=false then break combobox1.Items.Add(pdis.DeviceName);;//在这里列举出来的好象是显 卡的名称。而不是我想要的显示器的名称 end; combobox1.Text:=combobox1.Items[0]; form1.ComboBox1Change(sender); end; procedure TForm1.ComboBox1Change(Sender: TObject); var i:integer; begin for i:=1 to 120 do begin disr_a[i].w:=0; disr_a[i].h:=0; disr_a[i].c:=0; end; listbox1.Items.Clear; i:=0; dis.dmSize:=sizeof(dis); while EnumDisplaySettings(pchar(combobox1.Text),i,dis)<>false do if ChangeDisplaySettingsa(dis,CDS_test)<>DISP_CHANGE_BADMODE//检测是否可用 then begin inc(i); disr_a[i].w:=dis.dmPelsWidth; disr_a[i].h:=dis.dmPelsHeight; disr_a[i].c:=dis.dmBitsPerPel; listbox1.Items.Add('宽:='+inttostr(dis.dmPelsWidth)+'高='+inttostr(dis.dmPelsHeight)+'色彩:='+inttostr(dis.dmBitsPerPel)+‘刷新率='+inttostr(dis.dmDisplayFrequency)); if i>120 then break; end; end;
var MonitorCount,iloop:Integer; begin MonitorCount:=Screen.MonitorCount;//显示器的数量 for i:=1 to MonitorCount do begin MonitorForm[iloop]:= TBase_F.Create(Self); MonitorForm[iloop].Left:=MonitorForm[iloop].Left-Monitor.Left; MonitorForm[iloop].Top:=MonitorForm[iloop].Top-Monitor.Top; MonitorForm[iloop].Left:=MonitorForm[iloop].Left + Screen.Monitors[iLoop-1].Left; MonitorForm[iloop].Top:=MonitorForm[iloop].Top + Screen.Monitors[iLoop-1].Top; MonitorForm[iloop].Show; MonitorForm[iloop].MakeFullyVisible(screen.Monitors[iLoop-1]);//一定要加上这句 end; end;
其中Monitors[Index],即为第Index个显示器,对于显示墙模式,各显示器都有自己的坐标(Left,Top,Width,Heigth)等信息.只需要把窗体的Left和Top修改,即可被移到相应的Monitor当中.
type disr=record
w,h,c:integer;
end;
var
Form1: TForm1;
dis:_devicemodea;
disr_a:array[0..120] of disr;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
dis.dmSize:=sizeof(dis);
dis.dmPelsWidth:=disr_a[listbox1.ItemIndex].w;
dis.dmPelsHeight:=disr_a[listbox1.ItemIndex].h;
dis.dmBitsPerPel:=disr_a[listbox1.ItemIndex].c;
dis.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL;
ChangeDisplaySettingsa(dis,CDS_UPDATEREGISTRY);//设置当前的分辨率
end;
procedure TForm1.Button2Click(Sender: TObject);
var pdis:_display_device;
i:integer;
begin
combobox1.Clear;
for i:=0 to 10 do
begin
pdis.cb:=sizeof(pdis);
if enumdisplaydevices(nil,i,pdis,0)=false then break
combobox1.Items.Add(pdis.DeviceName);;//在这里列举出来的好象是显 卡的名称。而不是我想要的显示器的名称
end;
combobox1.Text:=combobox1.Items[0];
form1.ComboBox1Change(sender);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var i:integer;
begin
for i:=1 to 120 do
begin
disr_a[i].w:=0;
disr_a[i].h:=0;
disr_a[i].c:=0;
end;
listbox1.Items.Clear;
i:=0;
dis.dmSize:=sizeof(dis);
while EnumDisplaySettings(pchar(combobox1.Text),i,dis)<>false do
if ChangeDisplaySettingsa(dis,CDS_test)<>DISP_CHANGE_BADMODE//检测是否可用 then
begin
inc(i);
disr_a[i].w:=dis.dmPelsWidth;
disr_a[i].h:=dis.dmPelsHeight;
disr_a[i].c:=dis.dmBitsPerPel;
listbox1.Items.Add('宽:='+inttostr(dis.dmPelsWidth)+'高='+inttostr(dis.dmPelsHeight)+'色彩:='+inttostr(dis.dmBitsPerPel)+‘刷新率='+inttostr(dis.dmDisplayFrequency));
if i>120 then break;
end;
end;
MonitorCount,iloop:Integer;
begin
MonitorCount:=Screen.MonitorCount;//显示器的数量
for i:=1 to MonitorCount do
begin
MonitorForm[iloop]:= TBase_F.Create(Self);
MonitorForm[iloop].Left:=MonitorForm[iloop].Left-Monitor.Left;
MonitorForm[iloop].Top:=MonitorForm[iloop].Top-Monitor.Top;
MonitorForm[iloop].Left:=MonitorForm[iloop].Left + Screen.Monitors[iLoop-1].Left;
MonitorForm[iloop].Top:=MonitorForm[iloop].Top + Screen.Monitors[iLoop-1].Top;
MonitorForm[iloop].Show;
MonitorForm[iloop].MakeFullyVisible(screen.Monitors[iLoop-1]);//一定要加上这句
end;
end;