delphi函数里面不可以出现控件吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi函数里面不可以出现控件吗相关的知识,希望对你有一定的参考价值。

我想把读取listbox每行文件名封装成一个函数,但是编译提示未能识别listbox1,我想问问自定义函数语句里面不能出现控件的吗?

函数和控件本身是没有关系的
控件实际也就是一个对象而已,这里的listbox1就是TListBox的对象句柄,是可以传递的

根据提示,很明显显示无法识别listbox1,应该是作用域的问题,通过窗口编辑器创建的控件,默认是以成员变量的形式存在于窗口类中的

如果楼主要封装的函数是窗口类的成员函数,是可以直接访问成员变量listbox1的,既然提示未能识别
我想你的函数可能不是成员函数,这时访问的时候要带上窗口变量名的,因为Object Pascal中类成员默认是published的,外界可以访问

比如listbox1是窗口类TmainForm的成员变量,那么创建窗口的时候同时会声明一个窗口类TmainForm的变量的,该变量由Delphi运行库初始化,可能为mainFor1,当然这在Delphi中可以修改,需要查看你自己的命名
这时如果要在外部函数中访问listbox1,就要这样访问mainForm1.listbox1来访问,如果学习过面向对象的封装思想,这一点应该比较清楚
参考技术A 控件的指针可以作为函数的参数传递。
但是要注意跨窗体的要注明Form1->ListBox之类的才行,否则出错。
参考技术B 楼上已经很全面了

怎样使delphi里的控件随窗体的大小变化而变化

就比如新建一个窗体,里面添加许多控件,窗体刚开始比较小,等最大化或者运行全屏时,控件的大小和位置一点都不变,显的很不对称。试了许多方法也不行,只有提问了。

你应该在添加控件之前,先在窗体里面添加一些PANEL控件或者groupbox控件,把窗体分割成不同的区,然后在这些区里面再放你需要的控件。这些panel或groupbox可以设置他们的ALIGN属性为ALLEFT,ALRIGHT,Altop,ALCLIENT等等,这样当窗体变化时它们可以自动调节大小,如果效果还不好,可以再在这些panel里面再添加多个panel来进一步分割,以此类推就可以,如果嫌panel的边框不好看,可以把里面panel的bevelouter属性设置为bvNone就可以了。
如果有更高的比例要求,就在窗体的onsize事件里面,设定各种panel的宽度高度就可以了。
参考技术A 控件的Object Inspector中设置Anchors

如果最大化时需要向右延伸则
akRight:=true
参考技术B 在窗体的onsize事件里自己计算。或者使用splitter分割,每个控件设置alain属性

以上是关于delphi函数里面不可以出现控件吗的主要内容,如果未能解决你的问题,请参考以下文章

delphi2007中间的indy控件里面base64编码器没有了DecodeToStream函数怎么办?

怎样使delphi里的控件随窗体的大小变化而变化

delphi statusbar控件(状态栏)

delphi 怎样绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件 不透明

DELPHI TreeView控件问题

Delphi程序用了OCX控件,发布时需要连这个OCX也一起打包吗?