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 ,出现如下界面:

在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/

原文地址:https://www.cnblogs.com/semth/p/8390691.html

时间: 2024-10-05 05:32:38

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

winform中,如何控制控件位置随窗体的大小改变而改变

winform中,如何控制控件位置随窗体的大小改变而改变 有如下3种方法: 方法1 [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace MarkPrint

【PyQt5】(02)改变窗体的位置和大小

特别说明 为了直接展示本篇的重点,往期内容将不再写入代码中,读者可按需自行编码组合 为了更好的展示效果,代码段将以图片的形式上传,若想复制代码可移步笔者的Github 为了便于学习,每篇只解决一个小问题,如有问题,请参阅往期内容或在评论区留言 环境说明 平台:WIN10(教育版) 环境:Anaconda5.2(Python3.6.6) IDE:Pacharm2018.2.2(专业版) PyQt5:5.11.2 任务目标 设置窗体的位置和大小 更改窗体位置&大小 输出:一个空的窗体显示在屏幕指定位

Delphi中实现MDI子窗体(转)

Delphi中实现MDI子窗体 用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容  ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一个典型例子.MDI体系中至少需要两种窗体,只能将其中之一设置为主窗体,其余窗体全部则全部为子窗体,主窗体负责子窗体的管理.切换等工作.自然,子窗体上承载的内容可各不相同.Tidy浏览器最终实现了三种不同的窗体:主窗体.浏览子窗体.源代码子窗体.  ② 设置窗体类型  我们通过窗体的FormStyle属性设置

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

一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 自定义Window窗体样式: 基于自定义窗体实现自定义MessageBox消息提示框: 二.自定义Window窗体样式 自定义的Window窗体效果:   因为WPF默认的窗体比较简陋,大都需要自己实现Window窗体样式效果,基本思路很简单: 第一步:干掉默认样式:WindowStyle = Windo

Qt将窗体变为顶层窗体

我们知道,在windows上通过鼠标双击某应用程序图标,该应用程序往往会以顶层窗口的形式呈现在我们面前,但是对于一个已经打开的非顶层窗口,我们怎么将其激活为顶层窗口呢? 要达到激活,这个必须要满足两个条件,第一,必须要有通知激活的人,这个人必须是另一个应用程序(或同一应用程序的不同示例),他能发送信息给该窗体:第二,该窗体能够解析出该消息.至于一个应用程序如何向另一个应用程序发送消息的方法有很多,如共享内存,网络的方式等等.这里就不做详述,好,闲话少说,我们进入正题,有了前面的两个条件,假设现在

子窗体、父窗体方法互调

var childWindow = $("#editFrame")[0].contentWindow;//获取子窗体的window对象. childWindow.subForm(); $("#editFrame")得到frame [0].contentWindow//frame的子窗体,将JQUERY对象转化为DOM对象 subForm();//字窗体定义的方法 ----------------------------------------------------

浅析c#中登录窗体和欢迎窗体关闭的问题

第一次在cnbogs发文章,这次来个很基础的,主要给小白看. 在c#的winform编程中,我们经常会做登录窗体或欢迎窗体,并把他们作为启动窗体. 但是,我们有可能会遇到一些问题. 请看下面的代码: private void button1_Click(object sender, EventArgs e) { this.Close(); new Form2().Show(); } 这段代码想让form1中的button1在点击后关闭form1,show出form2,但是目的没有达到,form2

公共事件,修改主窗体和子窗体的(主题)样式

主窗体修改主题样式时,同时修改子窗体的主题样式 系统展示效果: 一.项目结构 二.代码分析 SetAllFormStyle 界面对象参数 /// <summary> /// 编写:yj /// 日期:2014-08-14 /// 描述:系统界面参数 /// </summary> public class SetAllFormStyle: System.EventArgs { public C1.Win.C1Ribbon.VisualStyle autoStyle { get; se

C#如何操作另一个窗体:[1]主窗体操作子窗体(转)

方法/步骤 1 首先,我们建立一个项目,然后往窗体拖入一个按钮 2 我们在项目管理那里,右击,选择"添加",再选择"windows窗体" 3 我们回到窗体1,双击按钮,打开代码窗口   在代码窗口中,我们输入代码 Form2 a = new Form2(); a.Show(); 这几句话的意思是,实例化一个Form2,然后弹出窗体   我们启动程序测试,点击程序窗口中的按钮   OK,现在你看到form2弹出来   我们回到form1中,打开form1的代码,然后在