2017-09-17 9 views
-2

埋め込みのように、あるフォームからパネルにコンポーネントを渡す際に問題があります。1つのTPanelに埋め込まれたフォームTCustomFormを使用

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; 

クラスI型プッシュしようとしているパッケージは次のパッケージに登録されています:

initialization 
    RegisterClass (TFrmRetailPOS); 

finalization 
    UnRegisterClass(TFrmRetailPOS); 

私は、表示するフォームのONCreateというフォームと、そのフォームが正しく作成されたテキストログをいくつか持っています。問題は、 "AForm"変数にコンポーネントがないことです。子供の数はゼロです。これは、動的にロードされるパッケージに由来します。私はdelphi 10.2を使用しています。
何が間違っていますか?

ありがとうございました。

+0

申し訳ありませんが...私は笑beeingてと馬鹿た空だった私はなぜ

If CreateAForm then AForm:=TCustomForm.CreateNew(Application.MainForm) 

厥にTCustomformの新しいインスタンスを作成しました。 CreateAFormの場合はTCustomformの新しいインスタンスを作成していましたが、AForm:= TCustomForm.CreateNew(Application.MainForm) –

答えて

-3

...笑 は、私は私の問題を検出し

+3

答えは質問に含まれていません。読書についてのことではありません。投稿全体を削除するのがベストです。 –

関連する問題