Une méthode que j'ai utilisée avec beaucoup de succès consiste à utiliser des trames avec un TPageControl et à lier tard mes trames à tPageControl la première fois que la page est sélectionnée. Cela permet de réduire le temps de chargement du formulaire, en ne créant pas de cadres qui ne sont jamais visualisés, mais en permettant la flexibilité d'être créé, l'état est maintenu lors du changement entre les onglets. Récemment, je suis passé à l'utilisation de formulaires et à leur intégration au lieu de cadres ... mais le concept est le même. La même chose peut être faite en utilisant un seul "point de montage" sur un TTabControl et en l'éteignant quand l'onglet est changé, mais ensuite la question de savoir comment traiter l'état de tabulation lorsque les onglets sont inversés est également affichée.
[EDIT] La question se pose de savoir comment gérer la communication entre la trame et la forme parente. C'est en fait très facile à faire en utilisant des interfaces. Il suffit de créer une nouvelle unité qui sera partagée par la forme et le cadre et ajouter deux interfaces:
type
IFormInterface = interface
[guid]
procedure FormProc;
end;
IFrameInterface = interface
[guid]
procedure SetFormController(Intf:IFormInterface);
end;
ont la forme de la mise en œuvre IFormInterface, et le cadre de la mise en œuvre IFrameInterface.Lorsque vous cliquez sur un onglet et d'afficher un cadre, puis exécutez le code comme suit:
var
FrameIntf : IFrameInterface;
begin
if Supports(FrameObj,IFrameINterface,FrameIntf) then
FrameIntf.SetFormController(Self);
end;
votre mise en œuvre du cadre de la méthode de SetFormController convoquaient sur la référence passée, ce qui lui permettrait d'appeler vers le haut dans la forme .
procedure TFrame1.SetFormController(Intf:IFormInterface);
begin
fFormController := Intf;
end;
Procedure TFrame1.Destroy; override;
begin
fFormController := nil; // release the reference
inherited;
end;
Procedure TFrame1.Button1Click(Sender:tObject);
begin
if fFormController <> nil then
fFormController.FormProc
else
Raise Exception.Create('Form controller not set');
end;
Merci Jim. Donc un TTabControl est une solution préférée lors du remplissage d'un onglet avec des objets lors de l'exécution, alors qu'un PageControl + TabSheets + Frames est une meilleure option lors de la configuration de l'interface utilisateur au moment de la conception? – Gulbahar
Non. TTabControl est la solution préférée lors de la modification des propriétés d'une liste d'objets du même type, car la modification des onglets ne modifie pas les contrôles que vous voyez, mais uniquement l'index des onglets. Un contrôle de page permet de mettre plus d'une page de contrôles différents sur un formulaire à la fois. (Et Jim n'a pas écrit cette réponse, je l'ai fait, il a fait un montage.) –
Merci Mason, c'est logique. Pour mon utilisation, il ressemble à un PageControl + quelques feuilles de tabulation, chacune tenant un cadre est la solution préférée pour ce que j'ai besoin de faire. – Gulbahar