怎么向BPL中的窗体赋值(100分)

  • 主题发起人 主题发起人 louqing_2
  • 开始时间 开始时间
L

louqing_2

Unregistered / Unconfirmed
GUEST, unregistred user!
我的BPL中的窗体是用一个函数来调用的,这个函数是查找类再创建的,有没有办法给这个BPL中的窗体赋值?如果是数字的画到好办,可以用SENDERMESSAGE,可不可以直接调用这个窗体的中的属公有变量?可以要怎么做?

我的代码如下:


function CreateFormByClassName2(const ClassName: string;VMainFromHwnd:Hwnd): TCustomForm;
var
AClass: TPersistentClass;
vmainform:TCustomForm;
begin
{ Note that TApplication "owns" this form and thus it must be freed prior
to unloading the package }
AClass := GetClass(ClassName);
if AClass <> nil then
begin
vmainform:= TComponentClass(AClass).Create(Application) as TCustomForm;
vmainform.ParentWindow := VMainFromHwnd;
vmainform.WindowState := wsMaximized;
Result :=vmainform ;
end
else
raise Exception.CreateFmt(sErrorCreateForm, [ClassName]);
end;


vmainform这个返回的窗体有没有办法给他自定义属性或者用全局变量?
帮我一下吧,包中的问题怎么怎么多?
 
自己顶先,没有回我,真烦啊
 
自己定义消息可不可以发送字符串啊?如果可以要怎么做?
 
没有回复我,我怎么结啊?分都没法给出去了?...........
 
进来收分了,不问,我的这个问题是不是太容易了,没有回我,不值的回啊....
 
主要是怕答了也没分...
类转化就可以了
代码如下(假设你在bpl的窗体类名是TbplForm)
with CreateFormByClassName2('TbplForm',VMainFromHwnd) as TbplForm do begin
//在此对TbplForm 中的public或published属性进行赋值
end;
 
不能用TbplForm这个类,因为可能有很多不同的这一样的窗体类,如果通过窗体的HWND这个属性可不可以啊?
分一定会给我,我都是讲信用的
 
还有一个问题就是CreateFormByClassName2不能引用窗体中的类啊,是窗体类引用它啊?这个我又要如何处理?
 
你的说法是矛盾的:你既要访问类的属性(成员)却又不能确定为某个具体的类名,那如何访问它们?
CreateFormByClassName2的第一个参数是ClassName也就是说你要访问的窗体类是明确的,所以你在 uses 中可以引用它的,然后在代码中就可以使用该类了

var AForm:TCustomForm;
begin
AForm=CreateFormByClassName2('TbplForm1',VMainFromHwnd);
with TbplForm1(AForm) do begin
//访问TbplForm1的属性
end;
end;
/////////////////
........
var BForm:TCustomForm;
begin
BForm=CreateFormByClassName2('TbplForm2',VMainFromHwnd);
with TbplForm2(AForm) do begin
//访问TbplForm2的属性
end;
end;
//////////////
如果你要让程序自动识别类,就要制定一套规则,并在bpl中使用registerClass了,那样就很复杂了,本人编写的一个平台,就是全自动扩展的。需要扩展的窗体是放在bpl中的。
 
我用的就是BPL的,BPL不能相互调用,只能一个方向的,因为我写的调用窗体的是一个公共的函数,只能在窗体中引用,不能引用窗体的,所以就会出现我前面说的那样子的,我的窗体类是注册了的,不知可不可以通过HWND来访问它的属性?
 
后退
顶部