埋め込みのように、あるフォームからパネルにコンポーネントを渡す際に問題があります。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を使用しています。
何が間違っていますか?
ありがとうございました。
申し訳ありませんが...私は笑beeingてと馬鹿た空だった私はなぜ
厥にTCustomformの新しいインスタンスを作成しました。 CreateAFormの場合はTCustomformの新しいインスタンスを作成していましたが、AForm:= TCustomForm.CreateNew(Application.MainForm) –