如何根据传递过来的TWinControl参数,在dll里动态创建一个带焦点的控件,如TEdit,请看代码:(200分)

  • 主题发起人 主题发起人 fangheling
  • 开始时间 开始时间
F

fangheling

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在dll里做一个动态创建TEdit的函数,其中AParent为父控件参数:
function CreateEdit(AParent:TWinControl):Boolean; StdCall;
begin
with TEdit.Create(AParent) do
begin
ParentFont:=False;// 这句如果不写的话就会产生Con't Assign a TFont to TFont 的异常
Parent:=AParent;
Left:=10;
Top:=10;
end;
end;
以上代码在调用执行时无问题,但是执行后的控制不能在AParent里显示出来(也就是说看不见),但它又却实是存在在AParent里的,我用
for i:=0 to AParent.Controls.Count-1 do
时可以遍历出来的

注:
如果是创建TLable则无问题(可以看得见)
后来发现可获焦点的Win控制均不能显示,如TStaticText,TDbEdit等

请问如何解决以上问题,或变通实现?

谢谢
 
Visible := True;
默认的visible 是false的
 
我试了一下,好像不是visible的原因
 
可能是应该在Dll的Entry中加入 hInstance := MainInstance;
 
楼上那样还是不行哦
我试了一下
ParentWindow:=AParent.Handle;
但显示出来的控制好象变味了,全平的就像ctrl3d=false;一样

帮帮忙
 
难道在dll里没办法实现吗?
 
我把返回值由Bool改为TEdit,在调用程序中这么写:

con := CreateEdit(Self); //Self为TForm
con.UpdateControlState;

这样能显示,不过还是有内存错误,等我有时间再查查。
 
后退
顶部