2009-09-30 5 views
6

Je faisais ma promenade habituelle autour de SO et bumped sur certaines discussions de cadres.Quelle est la manière acceptée d'utiliser des cadres dans Delphi?

Je suis surtout un amateur Delphi et non un professionnel, je devais donc apprendre à utiliser TFrames ma sorcière est: il

  • Créer une TFrame à l'intérieur est l'unité.
  • Ajouter cette unité au formulaire principal. Clause d'utilisation.
  • Avoir une variable privée de type de ce TFrame
  • OnCreate de la forme instancie le TFrame et attache à un TPanel à la fois sur la Création et .Parent
  • Sur un de mes actions mises que TFrame.Visible: = True et .BringToFront.

Ceci est ma pratique après quelques délibérations personnelles.

De quelles autres façons pouvez-vous utiliser les cadres?

Répondre

13

C'est un moyen, et il n'y a rien de mal à cela. Une autre façon, est de le faire visuellement. Vous pouvez donc ajouter le cadre à un formulaire. Pour ce faire, vous:

  • Créez votre cadre.
  • Rendez-vous au formulaire sur lequel vous souhaitez placer votre cadre.
  • Ajout d'un composant Cadres (onglet Standard)
  • Choisissez votre cadre dans la liste déroulante.
  • C'est tout!
+3

Ceci est ma méthode préférée aussi, mais dans certaines circonstances, je trouve utile de créer des cadres "à la demande". Surtout pour les cadres qui sont utilisés dans le cadre d'un contrôle à onglets et pourraient ne jamais être montrés. –

+0

@sveinbringsli: ouais ce serait ma pensée aussi. Trop de perte de mémoire pour les créer tous si votre utilisateur n'en utilisera qu'un ou deux. –

4

Vous pouvez même aller plus loin, en enregistrant vos cadres en tant que composants.

Cela vous empêche de modifier les propriétés des composants sur le cadre dès que le composant Cadre est sur le formulaire. Mais je pense que c'est une bonne chose.

Vous devez ajouter une chose au-delà de l'enregistrement de votre cadre en tant que composant, comme je l'explique dans cet article à propos de Delphi – Frames as visual Components – don’t forget your Sprig!.

Cette connaissance n'est pas la mienne: je l'ai eu de Ray Konopka pendant l'un de ses session au Delphi Live conference à San Jose plus tôt cette année.

1

Il s'agit plus d'une réponse négative, mais j'ai essayé une route qui incluait TFrames de reparent pour une interface graphique un peu complexe. Au début, tout s'est bien passé, mais lorsque l'application a mûri et que plus d'événements ont commencé à voler, j'ai dû désactiver et traiter les messages pendant un certain temps (20ms) avant de changer.

Un des coupables que j'ai finalement trouvé, TPopmenu s'enregistre aussi dans les structures de données globales. Cela a réduit les problèmes, mais ils étaient toujours là, alors je m'éloigne du concept.

+0

Yeaps, a un sens. Si vous avez trop d'images, quelque chose va définitivement se casser. –

+0

Plus encore, il y a un risque que les messages Windows d'une trame arrivent même si la trame a été réparée. –

5

Le seul problème avec votre approche est que vous ne pouvez pas ajouter plusieurs instances du même cadre à une forme donnée:

Frame1 := TMyFrame.Create(Self); 
Frame1.Parent := Self; 
// ... 
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists" 

La solution de contournement pour son est d'attribuer un nom différent pour chaque instance:

Frame1 := TMyFrame.Create(Self) 
Frame1.Parent := Self; 
Frame1.Name := "FirstFrame"; 
// ... 
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict 
+0

Merci pour l'idée. En général, j'ai seulement besoin d'une image par fonctionnalité, mais cela arriverait assez tôt pour que j'aie besoin de plusieurs instances. Je vous remercie!! –

Questions connexes