关于DELPHI开发的动态链接库存在的问题(10分)

  • 主题发起人 主题发起人 PeterC
  • 开始时间 开始时间
P

PeterC

Unregistered / Unconfirmed
GUEST, unregistred user!
本人通过DELPHI开发一个动态接链库,可以存在问题,希望各位侠能帮一帮。

条件:
窗体名 Form1
窗体控件名 Edit1:TEdit,Edit2:TEdit

//主要功能是控制窗体中TEdit类的ReadOnly读写状态。
第一个函数
Function Fun_ComponentStat(pFormName:TForm;pStatus:Boolean=False):Integer;stdCall;
Var
I:Integer;
Begin
For I:=0 To pFormName.ComponentCount-1 Do
Begin
If pFormName.Components Is TEdit Then
TEdit(pFormName.Components).ReadOnly:=Not pStatus;
End;
End;
在实际使用中,pFormName.Components 得出来的值非 TEdit类,也就是说永远没有办法运行TEdit(pFormName.Components).ReadOnly:=Not pStatus; 条语句

可以我如果将If pFormName.Components Is TEdit Then 语句屏蔽,那该函数就可以得到预期的效果,

如果这个函数写在窗体中,可单元中,不写在动态链接库,就不会出现前面提出的问题。
//该函数不会存在问题。
//第二个函数
Function Fun_ComponentStat(pFormName:TForm;pStatus:Boolean=False):Integer;
Var
I:Integer;
Begin
For I:=0 To pFormName.ComponentCount-1 Do
Begin
If pFormName.Components Is TEdit Then
TEdit(pFormName.Components).ReadOnly:=Not pStatus;
End;
End;

第一个函数与第二个函数,他们的代码是没有区别的,但他们存放的位置不一位,第一个是存放在动态链接库,第二个是存在单元中。

请问 pFormName.Components Is TEdit 这条语句存在什么问题?
 
不用Tform的Components属性
改用Controls试试
For I:=0 To pFormName.ControlCount-1 Do
Begin
If pFormName.Controls Is TEdit Then
TEdit(pFormName.Controls).ReadOnly:=Not pStatus;
End;
 
后退
顶部