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

news2024/12/27 11:53:31

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

方法概述:

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

关键概念:

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

示例代码:

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

uses
  Winapi.Windows, Vcl.Forms, Vcl.Controls, System.SysUtils;

procedure TForm1.CheckMonitor;
var
  Monitor: 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;
var
  I: Integer;
begin
  for I := 0 to Screen.MonitorCount - 1 do
  begin
    ShowMessage(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[] 获取所有显示器的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hibernate QueryPlanCache 查询计划缓存引发的内存溢出

目录 1.排查方式2.结论3.解决办法 前言:在生产环境中有一个后端程序多次报oom然后导致程序中断。 1.排查方式 通过下载后端程序产生的oom文件,将oom文件导入MemoryAnalyzer程序分析程序堆内存使用情况。 1、将oom文件导入MemoryAnalyzer后可以看到概览信…

在银河麒麟服务器操作系统中设置SSH登录限制

在银河麒麟服务器操作系统中设置SSH登录限制 1、引言2、 步骤一:检查MaxStartups选项3、步骤二:修改MaxStartups选项4、步骤三:重启SSH服务 💖The Begin💖点点关注,收藏不迷路💖 1、引言 在服务…

flask旧衣物捐赠系统—计算机毕业设计源码26577

摘要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规…

【干货分享】Ftrans安全数据交换系统 搭建跨网数据传输通道

安全数据交换系统是一种专门设计用于在不同的网络、系统或组织之间安全地传输数据的软件或硬件解决方案。这种系统通常包含多种安全特性,以确保数据在传输过程中的保密性、完整性和可用性。 安全数据交换系统可以解决哪些问题? 安全数据交换系统主要解…

神经网络卷积层和最大池化

文章目录 一、卷积层原理二、相关函数的概念三、卷积层的应用四、最大池化原理五、最大池化案例 一、卷积层原理 ./ 当前目录;…/ 上级目录 父类(也称为基类或超类)是指在类继承体系中被其他类继承的类。也就是被其他子类进行调用的类 当In_…

「豆包 Marscode 体验官」AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能

以下是「豆包 MarsCode 体验官」优秀文章,作者努力的小雨。 豆包 MarsCode 豆包MarsCode 编程助手支持的 IDE: 支持 Visual Studio Code 1.67.0 及以上版本,以及 JetBrains 系列 IDE,如 IntelliJ IDEA、Pycharm 等,版本要求为 22…

016.PL-SQL编程—过程

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

服务器测试之GPU基础汇总

GPU基础汇总 1.GPU简介 1.1.什么是GPU GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。可以形…

Flask 第三课 -- 第一个应用

上一章节我们已经成功安装了 Flask,接下来我们可以创建一个简单的 Flask 应用。 首先,创建一个名为 app.py 的文件,并添加以下内容: from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello,…

网络拓扑结构介绍

这张图展示了一个复杂的网络拓扑结构,它包括了多个运营商的接入、负载均衡、安全防护以及数据处理等多个关键环节。整个网络通过精心设计的架构和高效的节点连接,实现了数据的快速传输和安全处理。 一、各个模块介绍 运营商接入: 移动、电信…

论文速读|形机器人的高速和抗冲击远程操作

论文地址:https://arxiv.org/pdf/2409.04639 本文提出了一种综合解决方案,用于远程控制类人机器人,实现了高速度和冲击抵抗的操作。通过结合无校准的运动捕捉和重定标、低延迟全身运动流式传输工具箱和高带宽的摆线驱动器,显著提高…

【Python报错已解决】ValueError: All arrays must be of the same length

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:调整数组长度2.2 步骤二…

数据流图的例题2

答案选B 解析: 第一个错误,E1和E2是外部实体,实体之间不可能有数据传输,DF2错误 第二个错误,DF6是外部实体把数据传到存储。外部实体必须把数据传到加工,进行加工之后才能对数据存储,DF6错误…

Git环境搭建

我的博客大纲 我的GIT学习大纲 Git安装步骤: 1.官网地址 查看 GNU 协议,可以直接点击下一步: 2.Git配置选项如下: 3.选择后台客户端连接协议,选默认值 OpenSSL,然后下一步。 4.Git换行符号 5.选择终端类型…

Lesson08---string类(2)

1.assign assign的功能就类似于把string里面原来有的东西清空然后重新赋值 但是重新赋值也可以达到一样的效果感觉没什么用,了解一下就行 2.insert 第一个参数是在第几个位置插入,第二个参数是插入的字符串 但是这里不得不吐槽一下这里只能是字符串&…

Python之异常处理与程序调试(Exception Handling and Program Debugging in Python)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Netty权威指南:Netty总结-服务端创建

第13章 服务端创建 13.1 原生NIO类库复杂性 开发高质量的NIO的程序并不简单,成本太高 13.2 服务端创建源码 通过ServerBootStrap启动辅助类启动Netty 13.2.1 创建时序图 以下是关键步骤: 创建ServerBootStrap实例。这是启动辅助类,提供一…

AI写作培训课创业参考模式:《如何与AI共同写作》

在数字化时代,写作能力已成为职场和生活中不可或缺的一项技能。随着人工智能技术的发展,AI工具开始在写作过程中发挥越来越重要的作用。《如何与AI共同写作》正是这样一门专业的在线写作课程,它通过结合AI技术和实践操作,帮助学员在30天内掌握高效的写作技巧,提升个人品牌…

网络安全-原型链污染

目录 一、简单介绍一下原型链 二、举个例子 三、那原型链污染是什么呢 四、我们来看一道题-hackit 2018 4.1 环境 4.2开始解题 4.3 解答: 一、简单介绍一下原型链 JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原…

MySQL基础——DQL

DQL(Data Query Language,数据查询语言)是SQL中的一个子集,主要用于查询数据库中的数据。DQL的核心语句是 SELECT,它用于从一个或多个表中提取数据,并能够通过各种条件进行过滤、排序和聚合操作。下面是DQL…