6
votes

Comment gérez-vous plusieurs TPanel à la conception?

J'ai plusieurs TPanel sur ma forme principale que je montre / masquez en fonction des options qu'un utilisateur sélectionne. Le problème est que, au moment de la conception, je dois constamment les déplacer pour les éditer. Y a-t-il un moyen plus facile / meilleur que d'autres traitent cette situation?


0 commentaires

7 Réponses :


3
votes

Si les panneaux sont empilés, vous pouvez les réorganiser en cliquant avec le bouton droit de la souris sur un clic avec le bouton droit de la souris et en choisissant Control-> apporter à l'avant ou Control-> Envoyer à l'arrière de la menu contextuel.


0 commentaires

5
votes

Utilisez le Volet de structure pour trouver celui que vous voulez, puis apportez-le à l'avant.

 Pane Structure
(source: Embarcadero.com )

(mais ne suivez pas l'exemple d'Embarcadero ci-dessus; donnez à vos commandes noms significatifs afin que vos contrôles soient plus faciles à raconter.)


1 commentaires

+1; J'aime la plupart des contrôles entièrement recouvris. Vous sélectionnez simplement l'élément, cliquez avec le bouton droit de la souris et appuyez sur les touches O + F pour apporter le contrôle à l'avant.



10
votes

Si un seul panneau est visible à la fois, vous voudrez peut-être utiliser un tpagecontrol pour organiser des choses. Vous pouvez cliquer sur les onglets pour sélectionner lequel travailler au moment de la conception, puis masquer les onglets au moment de l'exécution ou masquer les onglets tout le temps et sélectionnez les pages en réglant Le ActivePage Propriété .


8 commentaires

+1 seconde cela. C'est de loin un meilleur moyen d'organiser des contrôles. Si vous n'avez pas besoin des en-têtes d'onglets, vous pouvez créer votre propre décengeur ou utiliser certains déjà développés et définir le TabHeight = 0 au moment de l'exécution.


L'inconvénient de cela, si je comprends bien, est qu'il y aura plus d'espace dans le conteneur au moment de l'exécution qu'au moment de la conception. Donc, si vous avez une disposition de taille fixe, cela ne fonctionnera pas bien. Ou avez-je eu la main du mauvais bout du bâton?


Oui, @David, c'est certainement un effet secondaire. Je ne considère pas que c'est une grande partie d'un problème, car des formes révisables, les ancres et l'alignement ont toujours rendu sans importance pour la forme que je concevais.


@Rob Tout dépend. Beaucoup de mes formes sont des formes non révisables.


@David, vous pouvez également masquer les onglets au moment de la conception et sélectionner la page active dans les propres ActivePage.


@ Jørn Comment sélectionnez-vous une page? De la vue de la structure?


@David, utilisez la propriété ActivePage dans l'inspecteur d'objets.


@ Jørn gentil. Vous devriez modifier la réponse de Rob pour inclure cette option aussi.



1
votes

J'ai aussi utilisé un TPAGECONTROL et j'ai gardé les onglets visibles au Temps de design. Cela m'a donné une convivialité des heures de conception (en cliquant sur les onglets que je veux). Ensuite, au moment de l'exécution, je masque les onglets de la page et passez des pages actives sur le contrôle de la page à l'aide du code, comme moyen de changer quel volet est visible. Cependant, cela conduit à des formes horriblement énormes et compliquées, ce qui était à son tour la cause de nombreux problèmes.

Pour votre cas, je vous suggère de considérer refactoring chaque vitre dans sa propre forme ou cadre. Ma préférence serait d'utiliser des formulaires, pas des cadres et les raisons de cela sont bien connues et bien documentées dans le monde Delphes.

Dans mes applications les plus bien structurées, chaque "volet" (mise en œuvre à l'aide de Tform, cependant, pas de TFArame) est séparée en différentes unités, ce qui résout à la fois vos problèmes de contrôle de la conception, et aboutit également à une structure plus structurée. solution globale.

Pendant que je pense que le volet de la structure (quelqu'un d'autre a souligné) est une bonne aide pour vous, lorsque vous souhaitez travailler avec des formulaires si complexes que les outils visuels de concepteur réguliers commencent à être plus difficiles à utiliser, c'est aussi une Bonne idée à envisager de casser votre formulaire, lorsque vous atteignez ce point de «rédaction de rendements» d'utiliser le formulaire de concepteur, sur ce qui devient une forme super super compliquée.


0 commentaires

2
votes

Je sélectionne le cadre ou le panneau à l'aide du combo de l'inspecteur d'objet, puis dans le menu principal, cliquez sur Modifier -> Apportez à l'avant

(qui est similaire à l'ouverture de la vue Structure)


0 commentaires

1
votes

Il est beaucoup plus facile d'utiliser des cadres à cette fin. Je les crée habituellement au moment de l'exécution et les ajoutons au formulaire au besoin. Il a également tendance à rendre le code beaucoup plus lisible car vous pouvez utiliser les mêmes noms de composants (E.G. ED_NAME ou L_Welcome) sur des images différentes sans avoir signé des affrontements plutôt que d'avoir ED_NameforPanel1, ed_nameforPanel3, etc.


0 commentaires

3
votes

Une mise en garde que j'ai trouvée lors du panneau1.Visible: = Faux in Runtime est qu'il gâche la mise en page.
La solution que j'ai trouvée travaille est de faire:

//Design time
//-----------
Panel1.BevelOuter:= bvNone; //Make the panel look flat.

//Run time when hiding the panel
//------------------------------
procedure HidePanel(APanel: TPanel);
var
  H,W: integer;
begin
  case APanel.Align of 
    alTop, alBottom: begin
      APanel.Tag:= Max(APanel.Tag, APanel.Height);
      APanel.Height:= 1;
    end; {alTop, alBottom:}
    alLeft, alRight: begin
      APanel.Tag:= Max(APanel.Tag, APanel.Width);
      Panel1.Width:= 1;
    end; {alLeft, alRight:}
    alNone: begin
      H:= Max(APanel.Tag and $FFFF, APanel.Height);
      W:= Max((APanel.Tag shl 16) and $FFFF0000, APanel.Width shl 16);
      APanel.Tag:= (H or W);
      APanel.Height:= 1;
      APanel.Width:= 1;
    end; {alNone} 
    //alClient: do nothing
  end;
end;

//Run time when restoring the panel
//---------------------------------
procedure UnhidePanel(APanel: TPanel);
var
  H,W: integer;
begin
  case APanel.Align of 
    alTop, alBottom: begin
      APanel.Height:= APanel.Tag;  
      APanel.Tag:= 0;
    end; {alTop, alBottom:}
    alLeft, alRight: begin
      APanel.Width:= APanel.Tag;
      APanel.Tag:= 0;
    end; {alLeft, alRight:}
    alNone: begin
      H:= APanel.Tag and $FFFF;
      W:= APanel.Tag shr 16;
      APanel.Height:= H;
      APanel.Width:= W;
      APanel.Tag:= 0;
    end; {alNone}
    //alClient: do nothing
  end; {case}
end;


0 commentaires