2010-02-05 8 views
3

Sur mon formulaire principal, j'ai un TPanel contenant des boutons qui agissent comme une barre d'outils. Je veux cloner/copier cette barre d'outils et les boutons et leurs fonctionnalités dans une seconde forme.Delphi - Dupliquer le tpanel et les boutons sur la deuxième forme

Le clonage du menu était simple en utilisant newmenu.merge (mainmenu). C'était un excellent raccourci pour dupliquer un menu principal. Mais je n'arrive pas à reproduire facilement ma barre d'outils sans avoir à assigner manuellement les événements et à garder une minuterie pour comparer et suivre les boutons activés et désactivés par rapport au menu principal réel du formulaire principal. En fonction de l'application, les boutons de la barre d'outils principale seront activés et désactivés à différents moments.

Des idées ici? Merci pour toutes suggestions ou astuces pour vous faciliter la tâche.

Répondre

4
  • Dupliquer les contrôles

    Dans le Concepteur de formulaire, sélectionnez le panneau et appuyez sur Ctrl + C pour le copier et tous ses enfants le presse-papiers. Accédez au deuxième formulaire et appuyez sur Ctrl + V pour coller.

    Si vous travaillez toujours sur la conception et que vous souhaitez la conserver cohérente entre les deux formes, créez un TFrame et créez votre disposition de la barre d'outils. Ensuite, mettez une instance de ce cadre sur vos deux formulaires. Les modifications apportées à la conception du cadre seront reflétées dans les formulaires.

    Voir Working with frames dans l'aide.

  • Se assurer que les deux jeux de boutons sont activés systématiquement

    Créer un module de données. Mettez un TActionList dessus. Ajoutez-y une action pour chaque bouton de votre formulaire principal. Affectez des gestionnaires d'événements aux événements OnUpdate des actions. Dans celles-ci, définissez les propriétés actions 'Enabled. Enfin, affectez la propriété Action de chaque bouton pour faire référence à l'objet d'action correspondant. Les boutons automatiquement seront activés et désactivés avec les actions. Aucune minuterie requise.

    En outre, vous pouvez également gérer les événements OnExecute des actions. Effacez la propriété OnClick de chaque bouton, puis déplacez le code OnClick du bouton dans le gestionnaire OnExecute de l'action correspondante. Il sera automatiquement appelé lorsque vous cliquez sur le bouton, même si la propriété OnClick est vide.

    Lorsque vous attribuez la propriété Caption ou Hint d'un TAction, les propriétés correspondantes de tous les contrôles associés changent aussi. De même pour les images, si le contrôle les supporte. Les actions peuvent également être affectées aux éléments de menu.

    Voir Using action lists dans l'aide.

  • Agissant comme une barre d'outils

    Il suffit d'utiliser TToolbar. C'est pour ça.

    Ou, une fois que vous avez l'habitude des actions, placez un TActionManager dans votre projet et utilisez-le avec TActionToolbar et TActionMainMenuBar. Voir Organizing actions for toolbars and menus dans l'aide.

+0

Merci, l'option frame a bien fonctionné. Je ne les avais pas utilisés auparavant et ma méthode existante était un tpnael standard avec des boutons. – TallGuy

1

Les boutons sont-ils associés aux actions? Si tel est le cas, vous pouvez utiliser l'événement OnUpdate de TActionList pour spécifier ce qui doit ou ne doit pas être activé. Sinon, ce n'est pas trop de travail à convertir en utilisant des actions.

Si vous allez sur cette route pour convertir en utilisant une ActionList, envisagez de placer l'ActionList dans un module de données où différentes unités et formulaires pourraient le référencer.

0

Vous pouvez utiliser ClipBoard objet Pour copier votre panneau.

Clipboard.SetComponent (Panel1);
Clipboard.GetComponent (Form2, GroupBox1);