当前位置: 首页 > news >正文

【delphi】判断多显示器下,程序在那个显示器中

Delphi 中,如果你的电脑连接了多个显示器,可以通过以下步骤判断某个程序在哪个显示器上运行。

方法概述:

  1. 获取程序窗口的位置(例如窗体的 LeftTop 坐标)。
  2. 使用 Screen.MonitorFromWindow 函数来确定该窗口所属的显示器。

关键概念:

  • TMonitor:表示一个显示器,包含该显示器的边界(BoundsRect)和工作区域(WorkAreaRect)。
  • Screen.Monitors[]:存储当前连接的所有显示器。
  • MonitorFromWindow:根据窗口句柄获取所属的显示器。

示例代码:

假设我们需要判断当前窗体 Form1 所在的显示器。

usesWinapi.Windows, Vcl.Forms, Vcl.Controls, System.SysUtils;procedure TForm1.CheckMonitor;
varMonitor: TMonitor;MonitorIndex: Integer;
begin// 获取窗体所在的显示器Monitor := Screen.MonitorFromWindow(Self.Handle, mdNearest);// 获取显示器的索引MonitorIndex := Monitor.MonitorNum;// 输出显示器信息ShowMessage(Format('The form is running on monitor %d with resolution %dx%d',[MonitorIndex, Monitor.BoundsRect.Width, Monitor.BoundsRect.Height]));
end;

解释:

  1. Screen.MonitorFromWindow(Self.Handle, mdNearest):这是核心函数。Self.Handle 代表窗体句柄,mdNearest 表示如果窗口跨多个显示器,则选择最近的显示器。
  2. Monitor.MonitorNum:获取显示器的索引号。
  3. Monitor.BoundsRect:获取显示器的分辨率和位置。

显示器检测选项:

  • mdNearest:获取最近的显示器。
  • mdPrimary:获取主显示器。

获取当前所有显示器的信息:

如果你想列出所有连接的显示器并获取相关信息,可以通过 Screen.Monitors[] 来完成。

procedure ListAllMonitors;
varI: Integer;
beginfor I := 0 to Screen.MonitorCount - 1 dobeginShowMessage(Format('Monitor %d: Resolution = %dx%d, Work Area = %dx%d',[I + 1,Screen.Monitors[I].BoundsRect.Width,Screen.Monitors[I].BoundsRect.Height,Screen.Monitors[I].WorkAreaRect.Width,Screen.Monitors[I].WorkAreaRect.Height]));end;
end;

总结:

  1. 使用 Screen.MonitorFromWindow 判断当前窗口运行在哪个显示器上。
  2. 通过 Screen.Monitors[] 获取所有显示器的信息。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 轨迹规划-B样条
  • OpenJDK 8 安装指南
  • 828华为云征文 | 华为云Flexusx与Docker技术融合,打造个性化WizNote服务
  • 直播相关02-录制麦克风声音,QT 信号与槽,自定义信号和槽
  • 机器学习 第12章 计算学习理论
  • HTML和HTML5有什么区别
  • Note091201_OutLook签名设置
  • EE trade:5g黄金是不是纯黄金
  • Kafka的权限配置中,匹配模式
  • GPS 或数字导航之前使用什么进行导航
  • Jmeter模拟用户登录时获取token如何跨线程使用?
  • Druid连接池练习
  • css总结(记录一下...)
  • 管理员权限一键启动:Run-Command让高权限操作更简单
  • 在启智社区使用MindFormers本地部署大模型(未解决)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【5+】跨webview多页面 触发事件(二)
  • 【css3】浏览器内核及其兼容性
  • 【刷算法】求1+2+3+...+n
  • Android 控件背景颜色处理
  • ERLANG 网工修炼笔记 ---- UDP
  • golang 发送GET和POST示例
  • iOS | NSProxy
  • iOS编译提示和导航提示
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript创建对象的四种方式
  • js继承的实现方法
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • learning koa2.x
  • React16时代,该用什么姿势写 React ?
  • springMvc学习笔记(2)
  • 解析带emoji和链接的聊天系统消息
  • 聊聊redis的数据结构的应用
  • 让你的分享飞起来——极光推出社会化分享组件
  • 为视图添加丝滑的水波纹
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​什么是bug?bug的源头在哪里?
  • #laravel 通过手动安装依赖PHPExcel#
  • (CPU/GPU)粒子继承贴图颜色发射
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (十六)视图变换 正交投影 透视投影
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (五)网络优化与超参数选择--九五小庞
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .naturalWidth 和naturalHeight属性,
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .Net 垃圾回收机制原理(二)
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)