J'aimerais mettre des boutons entre deux panneaux redimensionnables ou directement sur le séparateur si possible. Comment puis-je atteindre qu'ils vont se déplacer avec le séparateur? Comment puis-je les ancrez? P>
p>
edit: strong> Merci beaucoup p>
Peut-être que la chose la plus importante que j'ai oubliée de mentionner. Ce séparateur doit être aussi large que sur la capture d'écran et les boutons doivent la jeter; Donc, ces boutons sont en réalité "flottant sur la séparateur" maintenant. P>
4 Réponses :
Voici une capture d'écran de mon application: p>
p>
Ce formulaire comporte un seul ici, il est au moment de la conception et vous pouvez voir le séparateur dessiné avec une ligne pointillée: p>
L'astuce est que le séparateur ne contient pas de contrôle - pour que vous utilisiez un panneau. P>
Ainsi, en utilisant votre nommage, vous devez remplacer le séparateur1 avec un panneau pour contenir les boutons et ajouter un séparateur entre Panel1 et le nouveau panneau. Les panneaux gauche et moyen et le séparateur sont alignés Tsplitter code> situé à droite de la vue d'arborescence dans le volet de gauche. À droite du séparateur est un
TPanel code> qui contient le bouton. P>
p>
alert code> et le panneau de poignée droite est aligné
alclient code>.
Définir
splitter1.Autosnap: = false code> p>
Le problème est que je veux laisser les utilisateurs faire glisser tout le volet entre les panneaux. Je sais que c'est à court de comportement commun, mais c'est ce que le reste du projet est déjà. De même, je n'aime pas quand le séparateur est trop étroit pour que vous ayez besoin de vous concentrer pour le faire glisser pendant un moment. J'ai oublié de mentionner cela dans ma question; Je vais donc y ajouter là-bas. +1 Quand j'ai eu des points demain.
-1 Pour l'instant, testé cela, mais le séparateur ne reste pas placé entre deux panneaux alignés à gauche.
@Johan merci pour le bowvote, mais c'est vous qui a commis l'erreur que j'ai peur.
Correction de celui-ci Autosnap B> doit être modifié à partir de sa valeur par défaut (true) à False B>, il ne fonctionnera que possible.
Vous pouvez nichez des panneaux à l'autre.
panel4.align:= alRight; panel1 align:= alClient; panel2.Align:= alClient; splitter1.align:= alright or alLeft //experiment here panel3.Align:= alRight;
Pourquoi avez-vous besoin de nidification ici?
@DavID L'alignement des panneaux laissera le panneau1 et le panneau3 redimensionner avec le séparateur tout en gardant une taille fixe. Il y a d'autres façons de faire cela, mais j'aime nichier des panneaux. Et cela fonctionne dans toutes les versions de Delphes, sans nécessiter de code.
@Johan Vous n'avez pas besoin de nier les panneaux pour obtenir ce qui est souhaité sans avoir besoin de code.
@David, je sais que vous pouvez utiliser des ancrages mais je préfère la nidification.
@Johan Vous n'avez pas besoin d'ancres. Vous avez besoin de panneaux de gauche et centraux pour que Allerft et le panneau droit soient alclient. Ensuite, le séparateur est assis entre les panneaux gauche et moyen et tout est bon.
@David, oui, mais si vous voulez (la commande à l'intérieur) Panel1 pour développer que vous devez effectuer des nichements (ou des ancrages), sinon le panneau Middle B> se développera (simplement le testé :) et c'est Pas B> Ce que vous voulez, vous voulez que le panneau le plus à gauche soit développé / rétrécir.
Panel1, Splitter1, Panel2, Panel3 Organisez de gauche à droite. Alignement Allerft pour les 3 à gauche, Alclient pour le plus à droite. Changements de séparateur Largeur du panneau1 et Panel3. La largeur du panneau2 reste constante.
YO ne peut pas le faire automatiquement.
Manuellement, vous pouvez changer la propriété de gauche des boutons dans l'événement OnMoved du séparateur.
Il n'y a pas une bonne solution (visualisation sur le moment de la traînée, ce n'est pas bon), mais cela peut faire le résultat dont vous avez besoin. Vous pouvez résoudre ce problème, essayez procedure TForm1.Splitter1Moved(Sender: TObject);
begin
SpeedButton1.Left := Splitter1.Left + 40;
SpeedButton2.Left := Splitter1.Left + 40;
SpeedButton3.Left := Splitter1.Left + 40;
SpeedButton4.Left := Splitter1.Left + 40;
end;
C'est ce que je pensais plutôt qu'une tentative d'écrire mon propre contrôle. C'est une solution peu sale mais ça marche; J'ai essayé la même chose avant de demander ici. Donc +1 (demain) pour lire mon esprit :)
Il y a un avis important. Les deux panneaux entre séparateur doivent avoir le même paramètre alignwithmargins code>. (Vrai vrai ou faux). Sinon un séparateur ne fonctionne pas. Je me suis battu avec ce problème pendant quelques jours p>
Étant donné que
Tsplitter code> n'est pas un contrôle vitré, vous ne pouvez pas placer des contrôles dessus. J'abandonnerais le
Tsplitter code> au total et utilisez un
TPanel code> et écrivez une logique qui le fait se comporter comme un séparateur. Ceci est probablement assez facile, mais puisque je n'ai pas deplhi IDE / RTL / compilateur disponible en ce moment, je ne peux pas tenter (du moins pas maintenant).
@Andreas Ce n'est pas comme ça que vous le faites. Vous devez utiliser à la fois un séparateur et un panneau. C'est ainsi que fonctionnent les séparateurs.
@Andreas d'autre part, vous semblez avoir compris la question et je n'ai pas fait. J'ai lu et la relis-la et je ne peux pas savoir comment vous l'avez fait, mais vous semblez avoir déposé la signification souhaitée du Q!
vous pouvez définir la largeur de ce séparateur et jeu
biseautés: = true code> cette façon, il est pas trop petit pour frapper et collera visuellement.
@ Johan - C'est pourquoi je me suis mis un nom de composant; et IMHO Le séparateur 3D entre les panneaux 3D pourrait être moins visible que ce qu'il est