VCL 中的 Windows API 函数(6): BeginDeferWindowPos
下面先用常规方法实现对 Panel1 中的一组 Button 进行调整, 然后再用上面三个函数重新实现.
本例效果图:
代码文件:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Panel1: TPanel;Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;RadioButton1: TRadioButton;RadioButton2: TRadioButton;procedure RadioButton1Click(Sender: TObject);procedure RadioButton2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.RadioButton1Click(Sender: TObject); varnum,i: Integer;btn: TButton;L,T,W,H: Integer; beginnum := Panel1.ControlCount;L := 10;T := 10;W := (Panel1.ClientWidth - L * (num+1)) div num;H := (Panel1.ClientHeight - T * (num+1)) div num;for i := 0 to num - 1 dobeginif Panel1.Controls[i] is TButton thenbeginbtn := TButton(Panel1.Controls[i]);btn.Left := L;btn.Top := (H + T) * i + T;btn.Width := W;btn.Height := H;end;end; end;procedure TForm1.RadioButton2Click(Sender: TObject); varnum,i: Integer;btn: TButton;L,T,W,H: Integer; beginnum := Panel1.ControlCount;L := 10;T := 10;W := (Panel1.ClientWidth - L * (num+1)) div num;H := (Panel1.ClientHeight - T * (num+1)) div num;for i := 0 to num - 1 dobeginif Panel1.Controls[i] is TButton thenbeginbtn := TButton(Panel1.Controls[i]);btn.Left := (W + L) * i + L;btn.Top := T;btn.Width := W;btn.Height := H;end;end; end;end.
窗体文件:
object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 220ClientWidth = 307Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePixelsPerInch = 96TextHeight = 13object Panel1: TPanelLeft = 8Top = 8Width = 289Height = 161Caption = 'Panel1'TabOrder = 0object Button1: TButtonLeft = 152Top = 72Width = 75Height = 25Caption = 'Button1'TabOrder = 0endobject Button2: TButtonLeft = 160Top = 80Width = 75Height = 25Caption = 'Button2'TabOrder = 1endobject Button3: TButtonLeft = 168Top = 88Width = 75Height = 25Caption = 'Button3'TabOrder = 2endobject Button4: TButtonLeft = 176Top = 96Width = 75Height = 25Caption = 'Button4'TabOrder = 3endendobject RadioButton1: TRadioButtonLeft = 50Top = 183Width = 113Height = 17Caption = 'RadioButton1'TabOrder = 1OnClick = RadioButton1Clickendobject RadioButton2: TRadioButtonLeft = 184Top = 183Width = 113Height = 17Caption = 'RadioButton2'TabOrder = 2OnClick = RadioButton2Clickend end
用 BeginDeferWindowPos、DeferWindowPos、EndDeferWindowPos 重新实现的代码(窗体和运行效果是一样的):
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Panel1: TPanel;Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;RadioButton1: TRadioButton;RadioButton2: TRadioButton;procedure RadioButton1Click(Sender: TObject);procedure RadioButton2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.RadioButton1Click(Sender: TObject); varnum,i: Integer;btn: TButton;L,T,W,H: Integer;DeferHandle: THandle; beginnum := Panel1.ControlCount;L := 10;T := 10;W := (Panel1.ClientWidth - L * (num+1)) div num;H := (Panel1.ClientHeight - T * (num+1)) div num;DeferHandle := BeginDeferWindowPos(num); {准备调整一组窗口}for i := 0 to num - 1 dobeginif Panel1.Controls[i] is TButton thenbeginbtn := TButton(Panel1.Controls[i]);DeferHandle := DeferWindowPos(DeferHandle,btn.Handle,HWND_TOP, {此参数决定 Z 序}L, (H + T) * i + T, W, H, {新的位置与大小}SWP_NOZORDER {更多控制, 现在是不改变 Z 序});end;end;EndDeferWindowPos(DeferHandle); {实施调整} end;procedure TForm1.RadioButton2Click(Sender: TObject); varnum,i: Integer;btn: TButton;L,T,W,H: Integer;DeferHandle: THandle; beginnum := Panel1.ControlCount;L := 10;T := 10;W := (Panel1.ClientWidth - L * (num+1)) div num;H := (Panel1.ClientHeight - T * (num+1)) div num;DeferHandle := BeginDeferWindowPos(num);for i := 0 to num - 1 dobeginif Panel1.Controls[i] is TButton thenbeginbtn := TButton(Panel1.Controls[i]);DeferHandle := DeferWindowPos(DeferHandle,btn.Handle,HWND_TOP,(W + L) * i + L, T, W, H,SWP_NOZORDER);end;end;EndDeferWindowPos(DeferHandle); end;end.
转载于:https://www.cnblogs.com/del/archive/2008/10/20/1315054.html
VCL 中的 Windows API 函数(6): BeginDeferWindowPos相关推荐
- 在C#中调用windows API函数
Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用Windows ...
- Windows API函数速查
http://blog.csdn.net/ghevinn/article/details/8213614 Windows API函数速查 1. API之网络函数 WNetAddConnection 创 ...
- Windows API 函数大全
Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建 ...
- Windows API函数大全(方便查找)
Windows API函数大全 目录 Windows API函数大全 1. API之网络函数 2. API之消息函数 3. API之文件处理函数 4. API之打印函数 5. API之文本和字体函数 ...
- WINDOWS API函数说明
Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建 ...
- C#中调用Windows API的要点
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...
- C#中调用Windows API的要点【转载】
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...
- [收集]Visual C#中调用Windows API
在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希 ...
- 在c#中使用WINDOWS API(转)
下面以C#为例简单介绍调用API的基本过程: 动态链接库函数的声明 动态链接库函数使用前必须声明,相对于VB,C#函数声明显得更加罗嗦,前者 通过 Api Viewer粘贴以后,可以直接使用,而后者则 ...
最新文章
- 一只端午节鸭蛋粽子的背后:AI 与农业
- php与js的关系,Php与Js的交互
- 《Haskell函数式编程入门》——导读
- python面向对象编程之组合
- python mysqldb安装_Flask干货:访问数据库——Python数据库框架MySQLPython
- 【Verilog语法】分支延迟槽
- UNIX环境高级编程笔记
- 用友uclient客户端下载手机_影院6080手机版-影院6080手机客户端下载
- mysql打错了怎么办_数据库出错了怎么办?
- SQLServer中在视图上使用索引(转载)
- Android安卓开发-Helloworld
- 定时任务Quartz基础
- 中国最小黑客:为不做作业 黑掉学校系统
- Python(arcpy) 批量shp转raster
- 如果你是一个Java面试官,你会问哪些问题?
- latex中文编号是问号的问题
- 方差齐性检验python实现
- .Net CLR运行时是如何编译函数的
- php服装商城网站毕业设计源码241505
- 控制流分析之构建支配树
热门文章
- 辍学的名人_我辍学去追求成为网络开发人员和设计师的梦想
- nsq php,Nsq从入门到实践
- 联想e580没有声音_现在你可以购买通过 Linux 认证的联想 ThinkPad 和 ThinkStation
- 弄懂“进程”(下):进程的控制、同步和通信
- (C++)将整型数组所有成员初始化为0的三种简单方法
- python 数据类笔试题_一道 Python 类的笔试题详解
- JavaScript 复习之数据类型
- slurm用户快速入门手册
- 大数据流通存隐忧 产业信任体系亟待建立
- 搭建Docker私有仓库--自签名方式