我在将组件从一个表单传递到面板时遇到问题,比如嵌入式。 这是我正在使用的代码的一部分:
for I := 0 to Length(Modules)-1 do
begin
if Modules[i].PHandle<>0 then
begin
@p:=GetProcAddress(Modules[i].PHandle,'GetBaseControl');
if Assigned(p) then
begin
LogToFile( self, 'Criar Form externo de package...', '' , '' );
Form:=p('TFrmRetailPOS');
EmbeddForm(MainPanel,Form,True);
Modules[i].BaseControl:=Form;
Break;
end;
end;
end;
EmbeddForm程序是这样的:
procedure EmbeddForm(AParent:TFmxObject; AForm:TCustomForm ; CreateAForm :
Boolean);
begin
LogToFile( nil, 'EmbeddForm Start' , '' , '' );
If CreateAForm then AForm:=TCustomForm.CreateNew(Application.MainForm)
else LogToFile( nil, 'EmbeddForm não cria FORM' , '' , '' );
LogToFile( nil, 'EmbeddForm = '+Aform.Caption , '' , '' );
LogToFile( nil, 'EmbeddForm ChildrenCount = '+IntToStr(AForm.ChildrenCount) , '' , '' );
while AForm.ChildrenCount>0 do
begin
LogToFile( nil, 'EmbeddForm Pass ['+AForm.Children[0].Name+']' , '' , '' );
AForm.Children[0].Parent:=AParent;
end;
end;
p函数是这样的:
Function GetBaseControl ( ClassName : String ) : TCustomForm; StdCall; Export ;
Var AClass : TPersistentClass;
Begin
AClass:=TPersistentClass(FindAnyClass(ClassName));
if AClass<>nil then
begin
LogToFile( nil, 'Criou Class Form ['+ClassName+']' , '' , '' );
Result:=TComponentClass(AClass).Create(Application) as TCustomForm;
end
else LogToFile( nil, 'NÃO encontroi Class Form ['+ClassName+']' , '' , '' );
End;
我试图推送的类形式在这样的包中注册:
initialization
RegisterClass (TFrmRetailPOS);
finalization
UnRegisterClass(TFrmRetailPOS);
我在该表单的表单ONCreate上有一些文本日志,可以正确创建。问题是“AForm”变量上没有任何组件。孩子数量为零。这来自动态加载包。我使用的是delphi 10.2 我究竟做错了什么 ?!
感谢。
答案 0 :(得分:-3)
我在
中创建了一个新的TCustomform实例input:
one metaOmph(uno)
one metaAsdf(dos)
one metaPoil(tres)
output:
[ metaOmph , (uno) ]
[ metaAsdf, (dos) ]
[ metaPoil, (tres)]
那就是为什么它是空的哈哈... 遗憾