如何使主表单出现在第二个监视器中

时间:2016-06-12 01:12:55

标签: delphi

我使用Delphi 10,当我创建默认的vcl应用程序并运行应用程序时,我有两个显示器,主窗体总是出现在第一个监视器中,是否有办法让它在默认情况下显示在第二个监视器中?

这可能是IDE或属性或代码中的选项

由于

2 个答案:

答案 0 :(得分:6)

var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads'); // Absolute path. Folder must exist, will not be created for you. }, filename: function (req, file, cb) { var fileType = file.mimetype.split("/")[1]; var fileDestination = file.originalname + '-' + Date.now() + "." + fileType; cb(null, fileDestination); var map = new Map({ mapName: req.body.mapTitle, mapImagePath: "./uploads/" + fileDestination, ownerId: req.user._id }); Map.createMap(map, function(err, map){ if(err) next(err); console.log(map); }); } }); var upload = multer({ storage: storage }); router.post('/', upload.single('mapImage'), function (req, res) { res.status(200).send({ code: 200, success: "Map Created." }); }); 的{​​{3}}属性默认设置为TForm。如果没有活动表单,则使用主监视器。但是,没有办法专门将dmActiveForm设置为第二个监视器。

DefaultMonitor也有DefaultMonitor属性,但无论出于何种原因,它都是只读属性。

因此,要在特定监视器上显示TForm,您可以在全局Monitor列表中找到所需的监视器,然后执行以下任一操作:

  1. 手动将表单的TForm / Left属性设置为监视器TScreen.Monitors[]范围内的X / Y坐标或BoundsRect财产。

  2. 将监视器传递给Form的公共WorkareaRect方法。

答案 1 :(得分:2)

我有两个1600px宽度的显示器。我的主要监视器位于右侧,因此,为了在左侧放置一个表单,我将为其Left属性传递负值。

procedure TForm1.Button1Click(Sender: TObject);
begin
  // (3200 / 2 = + 1600) * -1 = -1600
  Left := (Screen.DesktopWidth div 2) * -1;
end;

结果为-1600,表示我的辅助显示器左侧最多。

您还可以通过调用Screen.Monitors[i].Left获取每个监视器的“最左侧”位置,如下代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  lMens: string;
begin
  lMens := '';
  for I := 0 to Screen.MonitorCount - 1 do
  begin
    lMens := lMens + ' | '
             + Format('%d - Left = %d', [i, Screen.Monitors[i].Left])
  end;
  ShowMessage(lMens);
end;

我希望帮助你。