J'ai une application qui charge des plugins qui sont sous la forme de bpls. Chaque plugin contient un formulaire à incorporer dans un autre paquet appelé CoreInf (nom de formulaire ManageF) qui est juste l'interface de base de l'application qui contient un TTabcontrol connu sous le nom de MTabcontrol1. Voici en gros ce qui se passeFocus TEdit sur un formulaire incorporé dynamiquement chargé Firemonkey
Une liste de plugins est chargée dynamiquement à l'exécution dans un ordre séquentiel pour la mise en page de l'interface. Il charge les plugins basés sur l'interface IPluginFrame (Shared.bpl). S'il contient l'interface, il essaie ensuite de créer un nouvel onglet dans MTabcontrol1 et d'incorporer le formulaire. Ce que j'essaie de faire est de créer un bouton de raccourci créé dynamiquement onClick, de mettre au point une boîte TEdit sur un formulaire ebedded spécifique, mais cela continue à apparaître comme des erreurs de violation d'accès.
Shared.bpl qui contient l'interface
unit PluginIntf;
interface
uses
FMX.Types, FMX.Controls;
type
IPluginFrame = interface
['{3B4943DB-951B-411B-8726-03BF1688542F}']
function GetBaseControl: TControl;
end;
implementation
end.
formulaire et Button qui doit être ebedded dans l'interface
InventoryInf.pas a la forme à embeeded
var
InventoryF: TInventoryF;
implementation
{$R *.fmx}
function TInventoryF.GetBaseControl: TControl;
begin
Result := InvenLayout; //<---- This is a a TLayout which align
//to client this is the parent of every item on form
end;
//Below is the on click event for the TSpeedButton invBtn
//Which looks for the embedded form that is embedded
//in MTabcontrol1 as a TTabitem that has the name InventoryF
procedure TInventoryF.Look4Tabitem(Sender: TObject);
var
o : TTabitem;
s :TEdit;
begin
o := TTabitem(ManageF.MTabcontrol1.FindComponent('InventoryF'));
ManageF.MTabcontrol1.ActiveTab := o;
s := TEdit(ManageF.MTabcontrol1.FindComponent('VendorF').FindComponent('SearchEdit1')); <-- Dont think it actually found the TEdit
s.Setfocus; <------------------ Not focusing giving access violtaion error
with DataConModule1.InventoryQuery do
...
end;
TSpeedButton invBtn qui est injecté dans le panneau sur le côté
unit InjectedInvBtn;
interface
implementation
uses
FMX.Types, InventoryInf, FMX.Controls, FMX.Forms, InjectedControlsHelper, FMX.StdCtrls,
ManageInf;
var
SysBtn: TSpeedButton;
initialization
SysBtn := TInjectedControl<TSpeedButton>.Create;
SysBtn.Align := TAlignLayout.Top;
SysBtn.Name := 'invBtn';
SysBtn.Text := 'INVENTORY';
ManageF.MenuPanel.AddObject(SysBtn);
SysBtn.OnClick := InventoryF.Look4Tabitem;
end.
** ManageF montrant comment il charge les formulaires en onglets MTabControl1 **
espoir i illustré le problème correctement. S'il vous plaît Aide = (
Vous dites que le TEdit peut ne pas être retourné. Utilisez le débogueur pour savoir s'il est nul ou le mauvais objet. –