delphi实现窗体组建随窗体大小改变而改变
在网上查了许多资料去论述如何在dephi中去实现组件随窗口大小的变化而变化,然都不尽如人意。有人说用组件的align + anchors 这两个属性去控制,但是我用了之后,让我大惊失色。把anchors属性下面的四个值都变为true.如果用户用鼠标去拖动窗口,那么窗口上的组件像是中了夺命书生的面目全非脚一样,基本上就没有所谓的五官之态。
下面就介绍我的方法,同样本人的方法也是看了网友们的资料才得以完成的。
(1) 下载TFormResizer组件
我用的是第三方插件TFormResizer,首先下载一个Easysize.rar,(百度一下,应该不难找到) 解压之后,其文件中内容如下:
本人建议应该把Easysite源文件,还有Easysize.d32, Easysize.dcu这三个文件放到你的dephi安装目录中的lib目录下,因为这里面基本上都是dephi的组件。这个组件默认的是标签不随窗口大小的改变而改变,其他的组件随窗口大小的改变而改变。如果想选择默认的方式,那么就不要修改这个源文件,直接进行安装这个组件即可。(在这里注意:不管你以前是否设置Label标签的AutoSize属性,他都会变成true)。
2.修改Easysize源文件
(1).在TSingleResizer的构造方法里,即在 constructor TSingleResizer.Create(LinkedControl, ParentForm : TControl;IncFont : Boolean;MinFS, MaxFS : Integer)方法里注释掉最后几句:
{ But do not adjust width of labels (to avoid
interaction of label auto-sizing with re-sizing) }
if FComponent is TCustomLabel then
FFlexWidth := false;
把上面的这几句话注释掉
(2).在procedure TSingleResizer.Resize(OwnerHeight, OwnerWidth; HeightRatio, WidthRatio : Double)方法里在最后几行里找到:
{ If component is a label, save original AutoSize value,
and set value temporarily to False }
if FComponent is TCustomLabel then
begin
OldAutoSize := GetAutoSizeProperty(FComponent);
SetAutoSizeProperty(FComponent, False);
end;
{ end W.K. insert }
和
{ begin W.K. insert }
{ If component is a label, set AutoSize temporarily to
True, call Refresh, and finally restore original value. }
if FComponent is TCustomLabel then
begin
SetAutoSizeProperty(Fcomponent, True);
TCustomLabel(Fcomponent).Refresh;
SetAutoSizeProperty(FComponent, OldAutoSize);
end;
{ end W.K. insert }
把上面的话用大括号注释掉。
(3)至此,源文件修改完毕
3.安装FormResizer这个组:
打开dephi软件,本人用的是dephi7, 点击 component ->Install Component ,出现如下界面:
FormResizer1.InitializeForm;
begin
FormResizer1.ResizeAll;
end;
delphi实现窗体组建随窗体大小改变而改变的更多相关文章
- MFC 无边框窗体实现用鼠标拖动窗体边缘实现窗体大小变化
无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN ...
- WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 自定义 ...
- Delphi中实现MDI子窗体(转)
Delphi中实现MDI子窗体 用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容 ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一 ...
- 【转】WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 自定义Window窗体样式: 基于自定义窗体实现自定义MessageB ...
- c++命令提示符窗体下打印指定大小的菱形代码
c++命令提示符窗体下打印指定大小的菱形代码 VS2010下,新建空项目.加入源文件,将代码粘贴进去就能够了. 通过改maxRows值的大小,能够控制菱形的大小 #include <stdio. ...
- DELPHI中如何让FORM窗体透明,只显示控件?
DELPHI中如何让FORM窗体透明,只显示控件?分享到: 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:7largewanglargewanglargewang等级:Blank ...
- delphi判断MDI窗体的子窗体是否存在
转]delphi判断MDI窗体的子窗体是否存在//*************************************************************************** ...
- winform在A窗体刷新B窗体,并改变窗体的属性
//A窗体设置B窗体的属性并刷新B窗体 Application.OpenForm["窗体名称"].Controls["控件名称"].visible=true;
- delphi application 和 form 主窗体 都是窗口
application 也是一个窗体, 和一般窗体不一样. 主窗体 是一个窗体. 然后这两个窗体,分别计算pid 获得结果竟然一样. 另外句柄是动态,全部都不一样.每一次都不一样.
随机推荐
- 第二章ARP——地址解析协议
本章我们要讨论的问题是只对 T C P / I P协议簇有意义的I P地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为 48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络 ...
- 1、redis安装与启动
1.安装包下载 官网上下载:http://www.redis.io/ 安装版本:3.0.7 安装环境:CentOS 下载命令:wget http://download.redis.io/release ...
- linux 系统的后台运行
后台运行:nohup 程序名 & 杀死后台 ps -ef|grep 名称 kill -9 id(查出的程序id)
- 将DataTable中的数据导出成Excel
public bool ExportFile(System.Data.DataTable dt){ SaveFileDialog sfd = new SaveFileDialog(); s ...
- bash's parameter expansion
[bash's parameter expansion] #: find first from left, remove-left ##: find last from left, remove le ...
- css3中的transform、transition、translate、animation(@keyframes)的区别
一.前言 在CSS中,我们经常会使用到transform.transition.translate.animation(@keyframes)这些长得相似,又不好区分的属性(值).每当需要使用它们,都 ...
- RTX二次开发::检索 COM 类工厂中 CLSID 为 {79210E58-99EB-45D0-8890-763EFEAA143F} 的组件失败,
解决方法: 1.Interop.RTXSAPILib.dll这个是32位的 将IIS 应用程序池 启用32位应用程序 设置为true就可以了, 2.把编译好的程序选择X86平台运行,就好了 程序员的基 ...
- Linux ssldump命令
一.简介 tcpdump是一款很强大.很有用的网络侦听软件,但是对于ssl加密的数据包就无能为力了:ssldump则是一款可以侦听ssl加密的数据包的软件. 二.安装 1)通过yum安装 yum ...
- Mysql加载本地CSV文件
Mysql加载本地CSV文件 1.系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL Mysql Workbench版本: ...
- ajax 整个表单的提交
重点:data: $("#form1").serialize() function setSaveNext() { setSaveData(); var cx = pageInde ...