delphi实现窗体组建随窗体大小改变而改变

摘要:
互联网上搜索了许多资料,讨论如何实现组件随dephi窗口大小的变化而变化,但并不令人满意。到目前为止,源文件已被修改。3.安装FormResizer组:打开dephi软件,我使用dephi7,单击component-˃InstallComponent,出现以下界面:在Unitfilename行,单击Browse以加载刚刚解压缩的Easyize源文件,然后单击OK。弹出以下界面:单击Comile,FormResizer组件出现在Tag选项卡上。

在网上查了许多资料去论述如何在dephi中去实现组件随窗口大小的变化而变化,然都不尽如人意。有人说用组件的align + anchors 这两个属性去控制,但是我用了之后,让我大惊失色。把anchors属性下面的四个值都变为true.如果用户用鼠标去拖动窗口,那么窗口上的组件像是中了夺命书生的面目全非脚一样,基本上就没有所谓的五官之态。

下面就介绍我的方法,同样本人的方法也是看了网友们的资料才得以完成的。

(1) 下载TFormResizer组件

我用的是第三方插件TFormResizer,首先下载一个Easysize.rar,(百度一下,应该不难找到) 解压之后,其文件中内容如下:

Dephi如何实现组件随窗口大小的改变而改变 - i_love_you_chai - i_love_you_chai的博客

本人建议应该把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 ,出现如下界面:

Dephi如何实现组件随窗口大小的改变而改变 - i_love_you_chai - i_love_you_chai的博客
在Unit file name 那一行上点击 Browse按钮   加载你刚才你解压的Easysize源文件,完成之后点击OK按钮,弹出如下界面:
Dephi如何实现组件随窗口大小的改变而改变 - i_love_you_chai - i_love_you_chai的博客
点击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实现窗体组建随窗体大小改变而改变》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Dubbo 3.0 前瞻:重塑 Spring Cloud 服务治理前端checkbox默认勾选状态的判断下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

delphi RAD XE 安装路径 重装备份

重装的时候,不要删除c盘C:ProgramData下的guid目录。以便完整卸载旧版本。 控件安装的生成的目标文件路径 C:UsersPublicDocumentsEmbarcaderoStudio14.0BPL C:UsersPublicDocumentsEmbarcaderoStudio14.0DCP C:UsersPublicDocumentsEmb...

Delphi的TService的輸入桌面切換(服务程序)(windows登录界面如何截图)(使用了OpenDesktop和GetThreadDesktop等API)

dfm: object CopyDeskService: TCopyDeskServiceOldCreateOrder = FalseOnCreate = ServiceCreateOnDestroy = ServiceDestroyAllowPause = FalseDisplayName = 'Copy Desk Service'Interactive...

Delphi MDI子窗体

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

Delphi数据库处理

Delphi数据库处理 第一节 BDE、ADO、InterBase和dbExpress Delphi中处理数据库主要有两种方法,也就是BDE、ADO,从Delphi 6.0开始还加入了一种dbExpress方法。另外,Delphi还提供了专门处理Borland 公司自己的数据库产品InterBase 数据库的专门的方法。 BDE(Bor...

【Delphi】RAD 10.4 开发Android时如何在迁移SDK和NDK路径后解决提示 ld: cannot find -lxxx的问题

今天使用lite版本安装了RAD Delphi10.4,发现自动把Android的SDK和NDK目录安装到C盘下,由于C盘容量紧张,所以想把目录迁移到其他路径! 在之前的版本是直接移动目录,在到delphi的tools-options菜单页面中修改SDK路径即可。 但是这次修改后发现在link时仍然找不到路径,查看了delphi的编译命令行信息,发现其中...

delphi 7 mdi子窗体。。。无法更改以命令对象为源的记录集对象的 ActiveConnection 属性。

问题是这样的 我做了一个小程序 把 adoconnection放到了主窗体  连接的是access数据库; 新建了一个子窗体继承自FBase  新建了一个pubulic方法 qrySearch 实现了打开表; formCreate调用了qrySearch方法 ; public procedure qrySearch(cLiuShui: stri...