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

VCL 中的 Windows API 函数(6): BeginDeferWindowPos

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 := 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 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 := 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 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.

相关文章:

  • 用T4 Template生成代码
  • YourSQLDba 配置——修改备份路径
  • Asp.NET MVC 技术参考:http://kb.cnblogs.com/zt/mvc/
  • 【算法学习笔记】01.先说点什么吧
  • 更改Zend Studio/Eclipse代码风格主题
  • 06 Locking and Latching
  • 数学图形之球面,椭球面,胶囊体,刺球
  • contentType 'text/xml; charset=UTF-8' conflicts问题
  • Windows Azure创建管理数据库
  • 使用js操作cookie和浏览器关闭时删除指定cookie
  • 解决HTML5中placeholder属性兼容性的JQuery插件
  • C# 集合
  • WPF中查找控件的扩展类
  • 获取IP和mac地址
  • OSPF ProcessID(进程号)详解
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • android 一些 utils
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • js正则,这点儿就够用了
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Vue实战(四)登录/注册页的实现
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 技术发展面试
  • 开发基于以太坊智能合约的DApp
  • 利用DataURL技术在网页上显示图片
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 学习笔记TF060:图像语音结合,看图说话
  • 大数据全解:定义、价值及挑战
  • 进程与线程(三)——进程/线程间通信
  • # Panda3d 碰撞检测系统介绍
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (六)c52学习之旅-独立按键
  • (算法)Game
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)shell调试方法
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net8 Blazor 尝鲜
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @Responsebody与@RequestBody
  • [BUG]vscode插件live server无法自动打开浏览器
  • [C++进阶篇]STL中vector的使用
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [CISCN2019 华东南赛区]Web11
  • [exgcd] Jzoj P1158 荒岛野人
  • [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
  • [HDU 3555] Bomb [数位DP]
  • [HDU] 1054 Strategic Game 入门树形DP
  • [iOS]-UIKit
  • [JS入门到进阶] 前端开发不能写undefined?这是误区!