BeginDeferWindowPos 和 DeferWindowPos、EndDeferWindowPos 是一组一起使用的函数, 可对一组窗口的位置、大小、Z 序等进行调整, 在 ExtCtrls 单元有用到.

下面先用常规方法实现对 Panel1 中的一组 Button 进行调整, 然后再用上面三个函数重新实现.


本例效果图:




代码文件:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls; type
  TForm1 = 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; var
  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.RadioButton1Click(Sender: TObject);
var
  num,i: Integer;
  btn: TButton;
  L,T,W,H: Integer;
begin
  num := Panel1.ControlCount;   L := ;
  T := ;
  W := (Panel1.ClientWidth - L * (num+)) div num;
  H := (Panel1.ClientHeight - T * (num+)) div num;   for i := to num - do
  begin
    if Panel1.Controls[i] is TButton then
    begin
      btn := 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);
var
  num,i: Integer;
  btn: TButton;
  L,T,W,H: Integer;
begin
  num := Panel1.ControlCount;   L := ;
  T := ;
  W := (Panel1.ClientWidth - L * (num+)) div num;
  H := (Panel1.ClientHeight - T * (num+)) div num;   for i := to num - do
  begin
    if Panel1.Controls[i] is TButton then
    begin
      btn := TButton(Panel1.Controls[i]);
      btn.Left := (W + L) * i + L;
      btn.Top := T;
      btn.Width := W;
      btn.Height := H;
    end;
  end;
end; end.

最新文章

  1. AWS多个EIP的解决方案
  2. C# 得到sqlserver 数据库存储过程,触发器,视图,函数 的定义
  3. Docker Network containers
  4. BZOJ2960: 跨平面
  5. u盘安装windows系统
  6. 1006 Do the Untwist
  7. 一起来开发Android的天气软件(三)——使用Volley实现网络通信
  8. MySQL远程登陆错误
  9. MINIDVD
  10. SpringBoot初识(一)
  11. 【物联网云端对接-4】通过MQTT协议与百度云进行云端通信
  12. Entity Framework Core 2.0 中使用LIKE 操作符
  13. Java多线程之线程池详解
  14. 服务器大量的fin_wait1 状态长时间存在原因分析-1
  15. JVM垃圾收集器-ParNew收集器
  16. ubuntu安装苹果Windows以及微软雅黑consolas字体
  17. mysql 存储过程、循环
  18. java线程学习之线程创建
  19. Spring AOP中pointcut expression表达式
  20. 开源网站流量统计系统Piwik源码分析——后台处理(二)

热门文章

  1. javascript中字符串与数组互转的方法分享
  2. [sh]. 点的含义
  3. 【Android】16.5 Android内置的系统服务
  4. 【Android】11.5 创建和管理Fragments
  5. 【Android】10.1 扩展组件库和其他视图--本章示例主界面
  6. hdoj1241 Oil Deposits
  7. How-to: Tune Your Apache Spark Jobs (Part 1)
  8. linux三剑客grep|sed|awk实践
  9. VC中的树形控件
  10. ehcache 缓存管理工具