使用TCustomForm在一个TPanel上嵌入表单

时间:2017-09-17 09:57:05

标签: delphi

我在将组件从一个表单传递到面板时遇到问题,比如嵌入式。 这是我正在使用的代码的一部分:

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 我究竟做错了什么 ?!

感谢。

1 个答案:

答案 0 :(得分:-3)

我在

中创建了一个新的TCustomform实例
input:
one metaOmph(uno)
one metaAsdf(dos)
one metaPoil(tres)

output:
[ metaOmph , (uno) ]
[ metaAsdf,  (dos) ]
[ metaPoil,  (tres)]

那就是为什么它是空的哈哈... 遗憾