知识大全 在Delphi中巧改窗体文件实现控件数组化

Posted

篇首语:幼敏悟过人,读书辄成诵。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在Delphi中巧改窗体文件实现控件数组化相关的知识,希望对你有一定的参考价值。

在Delphi中巧改窗体文件实现控件数组化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  delphi 开发的应用中 每一个窗体都有一个对应的窗体文件( dfm) 用来记录该窗体的属性以及窗体上所有控件的属性 以便在窗体关闭后能准确地重新生成窗体 几乎所有的DELPHI参考书都没有提到过该文件的具体情况 偶尔提到 也都泛泛而谈 因为窗体文件是二进制文件 只有在DELPHI提供的编辑环境中才能看到它的本来面目 对其进行操作可能会出现不可预知的错误 而且在大多数情况下 确实没有修改的必要 而本文谈到的和窗体文件密切相关

   要利用窗体文件 首先必须了解该类型文件的结构 窗体文件的结构很简单 朋友们可以生成一个窗体 随便放上一些控件 存盘后打开Unit dfm文件 就可以看到窗体文件是由关键字"object"和"end"构成的代码段 基本结构如下

  object  控件名 类名属性 =属性值属性 =属性值…end

   并且支持嵌套 Delphi在记录控件属性时 只记录修改过的属性 举一个例子 比如对一个标签控件(label )的缺省描述如下

  object Label : TLabelLeft = Top = Width = Height = Caption = &# ;Label &# ;End

   记录的五个属性都是随开发者拖放的位置和顺序不同而变化的 其它属性由于没有修改过 都是缺省值 所以不必记录

   窗体文件是有序的 它的有序性表现如下

  object 窗体名 Tform窗体属性 =属性值窗体属性 =属性值 // 以下是TgraphControl类型的控件object 控件名 类名控件属性 =属性值控件属性 =属性值 endobject 控件名 类名控件属性 =属性值控件属性 =属性值 end // 以下是TwinControl类型的控件object 控件名 类名控件属性 =属性值控件属性 =属性值 endobject 控件名 类名控件属性 =属性值控件属性 =属性值 end // 以下是其它类型的控件object 控件名 类名控件属性 =属性值控件属性 =属性值 end end

   在同一种类型的控件中 各控件排列的先后顺序和它被拖放到窗体上的先后顺序相同 这个顺序是可以人为修改的 我们正是通过修改这个顺序 来实现控件的数组化 下面将详细介绍

   熟悉VB的朋友肯定知道在VB中可以通过控件拷贝实现控件的数组化 而DELPHI中则没有这种功能 Delphi中可以使用Components Controls两个控件数组在一定程度上模拟控件的数组化 比如

  for I := to ControlCount do  if (Controls[I] is Tlabel) then(Controls[I] as Tlabel) Caption := &# ;Test&# ;

   这段代码的功能是将窗体上所有Label的Caption属性设为&# ;Test&# ; 这是一种非常有用的方法 大家如果不太熟悉可以参考delphi帮助作进一步了解 这种方法有很多局限 最明显的是我们并不知道Controls[i]或Components[i]到底代表哪一个控件 只能用遍历的方法进行筛选 这不仅影响了程序执行的效率 也带来编程上的繁琐

   其实 Controls和Components中控件的排列顺序和对应的窗体文件( dfm)中控件描述代码段的排列顺序是相同的 前面我们谈到窗体文件是可以进行适当修改的 也就是说 我们可以根据需要调整窗体文件中控件描述代码段的排列顺序 让Controls和Components这两个控件数组全在掌握之中 这样我们就能清楚知道Controls[I]或Components[I]具体代表的是哪一个控件 下面举例说明

   比如 我们想让窗体Form 上的所有Tbutton灰化 最简单的方法是一句一句的编写代码

  Button Enabled := False;Button Enabled := False;  … …

   如果Tbutton数量很多 代码就变得很冗长 于是我们采用一个循环来实现

  for I := to ControlCount  do    if Controls[I] is Tbutton Then(Controls[I] as Tbutton) Enabled := False;

cha138/Article/program/Delphi/201401/30261

相关参考

知识大全 Delphi学堂之绑架窗体之Delphi版

Delphi学堂之绑架窗体之Delphi版  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!绑架窗体顾

知识大全 C#实现窗体和任意控件的拖动

C#实现窗体和任意控件的拖动  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  程序内有大部分注释了

知识大全 PowerBuilder9.0窗体控件自动缩放的实现

PowerBuilder9.0窗体控件自动缩放的实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 使用反射将业务对象绑定到 ASP.NET 窗体控件

使用反射将业务对象绑定到ASP.NET窗体控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引

知识大全 在VB.Net中创建使用控件数组

在VB.Net中创建使用控件数组  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一首先创建一个But

知识大全 巧妙用Delphi设计多边形窗体

巧妙用Delphi设计多边形窗体  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文将介绍如何利用W

知识大全 如何使用Delphi实现无边界窗体的移动

如何使用Delphi实现无边界窗体的移动  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在用De

知识大全 实现应用程序的文件拖放功能

  在Delphi中有许多控件支持拖放操作但仅限于应用程序内部而不能实现从Windows环境里向应用程序拖放文件本文将要介绍的就是如何用Delphi编写支持文件拖放的应用程序由于主要使用Windows

知识大全 窗体的建立时机及缓冲的思想在ini文件中的应用

  1窗体建立的时机问题  由于窗体属于比较占系统内存的对象所以在应用程序中何时建立窗体就变得比较重要窗体的建立时机有一下几种  ()在主窗体建立时自动建立窗体  ()在需要的时候才建立窗体然后窗体关

知识大全 自定义事件实现不同窗体间的通讯Delphi篇

自定义事件实现不同窗体间的通讯Delphi篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!要实现子