除了创建时指定窗口位置之外,还有3种移动窗口位置的办法(移动的同时往往可以改变窗口大小)(SetWindowPos最有用,它有许多标志位)

首先,在创立窗口对象的时候,CreateWindowEx就可以指定窗口的位置。除此之外,还有三种方法可以改变窗口的位置:

procedure TWinControl.CreateWindowHandle(const Params: TCreateParams);
begin
  // 根据之前准备的Params参数使用API创建窗口。其10个参数都是Params的参数,0表示Menu,WindowClass的十项内容只用到了hInstance一项
  // important 控件移到正确的显示位置,就是靠这个X和Y,会移到父控件区域的相对位置(实践检测)。而VC里一般使用CW_USEDEFAULT

  with Params do
    FHandle := CreateWindowEx(ExStyle, WinClassName, Caption, Style, X, Y, Width, Height, WndParent, 0, WindowClass.hInstance, Param);

  // API,一共12个参数,注意,CreateWindowEx比CreateWindow多一个参数:dwExStle(Delphi根本没有用到CreateWindow)
  // 前9个参数都是TCreateParams的参数,中规中矩
  // 第10个参数是menu
  // 第11个参数表示,这个新创建的窗口附属于哪个hInstance
  // 第12个参数用不到
end;

--------------------------------------------------------------------

第一种办法改变Windows窗口的坐标(最有用,因为它有许多有用的标志位):

SetWindowPos(FHandle, 0, ALeft, ATop, AWidth, AHeight, SWP_NOZORDER + SWP_NOACTIVATE);

第二种办法改变Windows窗口的坐标(亲测):

procedure TForm1.Button2Click(Sender: TObject);
var
  WindowPlacement: TWindowPlacement; // Windows结构类型,包含最大化最小化窗口位置等6项内容
begin
  WindowPlacement.Length := SizeOf(WindowPlacement);
  GetWindowPlacement(Panel1.Handle, @WindowPlacement);  // API,取得结构体指针,包括7项内容
  // 更改窗口的位置信息
  WindowPlacement.rcNormalPosition := Panel1.BoundsRect;
  WindowPlacement.rcNormalPosition.Left := WindowPlacement.rcNormalPosition.Left - 10;
  WindowPlacement.rcNormalPosition.Right := WindowPlacement.rcNormalPosition.Right - 10;
  SetWindowPlacement(Panel1.Handle, @WindowPlacement);
end;

第三种办法改变Windows窗口的坐标(亲测):

  MoveWindow(panel1.Handle, 10, 10, 300, 100, true);

--------------------------------------------------------------------

另外,SetScrollPos也有些相关的作用,值得研究

时间: 2024-11-02 23:37:28

除了创建时指定窗口位置之外,还有3种移动窗口位置的办法(移动的同时往往可以改变窗口大小)(SetWindowPos最有用,它有许多标志位)的相关文章

Linx快速创建虚拟机,并在创建时指定其IP地址

一个小脚本,练习环境下大家可以用用:前提在 /var/lib/libvirt/images 目录下有用于创建虚拟机的模板镜像template.img及模板配置文件template.xml, #!/bin/bash#This script will create a virsh-domain named $1.IMG_DIR=/var/lib/libvirt/images#alias ssh="ssh -o StrictHostKeyChecking=no"#UUID=uuidgen#判

mysql创建数据库指定字符集

mysql 创建 数据库时指定编码很重要,很多开发者都使用了默认编码,但是我使用的经验来看,制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题. 我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来很多mysql数据库工具(除了phpmyadmin,我偶尔用,功能强速度慢)都不支持创建时指定数据库编码,当然可以改my.ini来解决这个问题,但是需要重新启动mysql,不过用下面的语句会更有效 GBK: create database test2 DEFAULT CHARACTER

docker 创建容器时指定容器ip

Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定. 在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的. 我们可以创建自己的bridge网络 : mynet,创建容器的时候指定网络为mynet并指定ip即可. 查看网络模式 docker network ls 创建一个新的bridge网络 docker network create --driver bridge --subnet=172.18.12.0/16 --gatewa

示例-创建表格-指定行列&删除表格的行和列

<body> <script type="text/javascript"> /* *上面的方法和你麻烦.*既然操作的是表格,*那么最方便的方式就是使用表格节点对象的方法.* *表格是由行组成.表格节点对象中insertRow方法就完成了创建行并添加的动作.* *行是有单元格组成.通过tr节点对象的insertCell来完成.*/function crtTable(){ var oTabNode = document.createElement("ta

使用for循环创建在指定目录下批量创建文件并重命名所有文件

要求1: 使用for循环在/root/scripts/practice/q1/oldboy 目录下创建十个文件.名称依次为: oldboy-1, oldboy-2, ..... oldboy-10. 脚本实现: #!/bin/bash #Question1 shopt -s expand_aliases alias ll="ls -l" cd /root/scripts/practice/q1 #首先判断目录是否存在,不存在则创建目录 if [ ! -e oldboy ] then  

mysql创建数据库指定编码格式

在mysql中使用sql语句创建数据库时,老是忘记指定编码格式.这就导致了使用utf-8格式的工程访问数据库的过程中产生中文乱码的问题.后来发现大部分问题出自创建数据库的时候没有指定编码格式.创建数据库指定编码格式的一种方法是在创建数据库sql语句中指定编码格式,如下所示,指定数据库编码格式为utf-8 CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; mysql创建数据库指定编码格式,布布扣,

java在线聊天项目 swt可视化窗口Design 登录框注册按钮点击改变窗口大小——出现注册面板 实现打开登录框时屏幕居中

登录框注册按钮点击改变窗口大小--出现注册面板  首先用swt可视化设计登录窗口如下图: 此时窗口高度为578 没点击注册时高度为301(可自己定) 注意:注册用户的Jpanel 的border选择Title Border,title属性是"注册用户"    布局Layout选择Absolute Layout 接着,对话框窗口设计好后,双击注册按钮,进行代码编辑,在注册按钮的监听代码中增加一个if判断,当等于301,就给改为窗口高度578,否则改为301 因为使用的是匿名内部类,不能直

怎样实现分享网站文章到微信朋友圈时指定缩略图

当下朋友圈很火,很多企业都将微信朋友圈作为品牌传播的途径,经常会发一些精彩的文章到微信朋友圈供大家自发传播,这样的想法很好,对于优质的内容,网友们也乐于转发与朋友们分享,对品牌宣传与推广确实是有好处的. 通过微信公众平台发文章,需要登录微信公众平台,非常麻烦,而且不能同步到网站中,同一篇文章可能要在多在地方编辑发布,增加了人力和时间成本,有没有一劳永逸的办法呢?当然是有的,其中之一是做一个能在台式机.笔记本电脑.平板电脑.手机上显示出一致效果的网站(IT领域叫响应式网站或全屏幕适应网站),先在这

C#写UTF8文件时指定是否含BOM头

BOM的基本概念 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE".这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的:如果收到FFFE,就表明这个字节流是Little-Endian的.因此字符"ZERO WIDTH N