在网上查了许多资料去论述如何在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 ,出现如下界面:

在Unit file name 那一行上点击 Browse按钮   加载你刚才你解压的Easysize源文件,完成之后点击OK按钮,弹出如下界面:

点击Comile按钮,这样就在Tag标签页上出现www 上出现了FormResizer组件。
4.在form窗口中加如下代码:
      (1) procedure TForm2.FormCreate(Sender: TObject);
                begin
                            formresizer1.ResizeFonts := true;   //设置字体是否随窗口大小的改变而改变。
                             FormResizer1.InitializeForm;
                end;
      (2)在form的OnResize事件上增加如下代码:
               procedure TForm2.FormResize(Sender: TObject);
               begin
                     FormResizer1.ResizeAll;    
               end;
       
自此,窗口中的组件就可以随窗口大小的改变而改变了。
 
http://blog.163.com/i_love_you_chai/blog/static/1708911082010112105057644/

delphi实现窗体组建随窗体大小改变而改变的更多相关文章

  1. MFC 无边框窗体实现用鼠标拖动窗体边缘实现窗体大小变化

    无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN ...

  2. WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 自定义 ...

  3. Delphi中实现MDI子窗体(转)

        Delphi中实现MDI子窗体 用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容  ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一 ...

  4. 【转】WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 自定义Window窗体样式: 基于自定义窗体实现自定义MessageB ...

  5. c++命令提示符窗体下打印指定大小的菱形代码

    c++命令提示符窗体下打印指定大小的菱形代码 VS2010下,新建空项目.加入源文件,将代码粘贴进去就能够了. 通过改maxRows值的大小,能够控制菱形的大小 #include <stdio. ...

  6. DELPHI中如何让FORM窗体透明,只显示控件?

    DELPHI中如何让FORM窗体透明,只显示控件?分享到: 对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:7largewanglargewanglargewang等级:Blank ...

  7. delphi判断MDI窗体的子窗体是否存在

    转]delphi判断MDI窗体的子窗体是否存在//*************************************************************************** ...

  8. winform在A窗体刷新B窗体,并改变窗体的属性

    //A窗体设置B窗体的属性并刷新B窗体 Application.OpenForm["窗体名称"].Controls["控件名称"].visible=true;

  9. delphi application 和 form 主窗体 都是窗口

    application     也是一个窗体,  和一般窗体不一样. 主窗体 是一个窗体. 然后这两个窗体,分别计算pid   获得结果竟然一样. 另外句柄是动态,全部都不一样.每一次都不一样.

随机推荐

  1. Tkinter tkMessageBox

            Tkinter tkMessageBox: tkMessageBox模块用于显示在您的应用程序的消息框.此模块提供了一个功能,您可以用它来显示适当的消息  tkMessageBox模块 ...

  2. sublime中开启表格插入

    1. 导入包 tableedit 2. ctrl+shift +p 输入teecv,然后开启后面连个东西: 3 按tab可以插入表格

  3. 爬虫——回顾HTTP 协议

    一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...

  4. jQuery基本API小结(上)--选择器-DOM操作-动画-Ajax

    一.JQuery基础选择器 1.基本选择器(CSS选择器) 2.$()中的()不一定是指定元素,也可能是函数. 3.“*”号选择器,它的功能是获取页面中的全部元素:$(“*”). 由于使用*选择器获取 ...

  5. leetcode686

    /* 上来的想法是KMP的思想,但是具体不会KMP的实现,c++STL的string 中的find?但是要注意A的长度与B的长度的问题,首先A的长度要大于B的长度 分为三个阶段: 1. A比B的长度要 ...

  6. Strem String Memory TStringStream

    System.SysUtils 一.TStringStream方法 Strem>String TMemoryStream to String stm: TStream; ss: TStringS ...

  7. Python常见函数用法

    1. shape()函数 在numpy模块 输入参数:类似数组(比如列表,元组)等,或是数组 返回:一个整型数字的元组,元组中的每个元素表示相应的数组每一维的长度 # shape[0]返回对象的行数, ...

  8. jira 安装

    jira jira是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪(bug管理).客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.同禅道等类似. 安装前准备 ...

  9. 微信小程序相关三、css写小黄人

    小程序上课第三天,因为今天院里有活动,所以没去上课,第四天上午又因为要召开入党转正大会,又耽误了一上午,下午去上课,要了资料.这两天讲了一些零零碎碎的东西,做的实例有上面这个小黄人 都是用的css,基 ...

  10. Unity协程使用经验

    [Unity协程使用经验] 1.协程的好处是,异步操作发起的地方和结束的地方可以统一在一个方法,这样就不用引入额外的成员变量来进行状态同步. 2.在一个协程中,StartCoroutine()和 yi ...