2011-09-02 6 views
7

Commencer à tester FireMonkey et ne peut pas trouver un moyen de créer des composants dynamiques/positionnés.Ancrage des composants GUI dans FireMonkey

VCL avait la propriété Anchor, FM non.

Tout le monde voir quelque chose que je manqué

Mise à jour:

ancrage simple n'est pas disponible en FM. Vous devez créer TLayouts et aligner ceux-ci, puis placez les contrôles dans le panneau pour les "coller". Si vous avez utilisé une ancienne version de Builder ou Delphi, ce sera la même chose que nous avions l'habitude de faire avec TPanels.

+0

Il existe ['FMX.Types.TControl.Anchors'] (http://docwiki.embarcadero.com/VCL/XE2/fr/FMX.Types.TControl.Anchors), mais il est privé et n'est donc pas disponible. –

+0

Vous pourriez vouloir regarder le composant TLayout. On dirait que vous le déposez sur le formulaire, le configurez et y déposez quelques composants ... juste une supposition. –

+0

@Bob: l'alignement n'est pas la même chose que l'ancrage. –

Répondre

11

Ceci est la réponse à votre question. La propriété anchors dans VCL a apparemment été remplacée par Margins and Padding (en raison de considérations de performances) et j'ai trouvé de la documentation sur le wiki XE2 (http://docwiki.embarcadero.com/RADStudio/en/FireMonkey_Application_Design). Je doute que des ancres seront mises à une date ultérieure. Pour ancrer deux boutons (Ok et Annuler) en bas d'un formulaire sur le côté droit, procédez comme suit: Voir les images ci-dessous pour le bouton Ok et Annuler.

enter image description here

place un petit panneau aligné sur le fond de la forme, par exemple environ 40 hauteur. Réglez les «Marges» sur le panneau du bas pour créer un espace plus petit dans lequel les boutons vont vivre, assurez-vous que vous réglez l'alignement du bouton pour alRight. Par exemple, l'écart entre le bord droit du formulaire et le bouton le plus à droite a une marge de 15. Les marges supérieure et inférieure ont été définies à 12. Cela ancre le bouton le plus à droite. «Remplissage» est l'opposé d'une marge, le rembourrage place l'espace hors du contrôle. Pour le bouton le plus à droite, j'ai ajouté un padding de 20 au gauche côté, ce sera l'espace entre les deux boutons. Pour le second bouton à gauche du premier, tout ce que nous devons faire est de définir la propriété align sur alRight, pas besoin d'ajuster le remplissage ou les marges.

+0

J'aimerais voir l'image, mais il est trop petit, pouvez-vous poster une version plus grande? – Johan

+1

Je me demandais si c'était trop petit, je suis tombé juste dans une version plus grande – rhody

+0

+1 Utilisation de panneaux imbriqués, majeur PITA mais ça marche. – Johan

5

Voici la réponse que vous recherchez: Les contrôles FMX n'ont pas d'ancre. J'imagine que ce sera une fonctionnalité de "prochaine version".

+2

Ce genre de fait Firemonkey inutile. Non, je vais le reformuler, ça rend Firemonkey inutile. –

+0

((: ils sont dans le - ce que j'aime appeler - "business singe - firemonkey" – ComputerSaysNo

+1

Ce n'est pas vrai, utilisez Margins and Padding, son expliqué dans les documents du wiki.Non aussi évident que les ancres, mais – rhody

7

Supprimez plusieurs composants TLayout sur le formulaire et configurez leurs propriétés d'alignement comme vous le souhaitez. Déposez d'autres composants dans ces mises en page et définissez leurs propriétés d'alignement par rapport au TLayout dans lequel elles sont contenues. Semble fonctionner pour moi ...

+0

Cela pour l'alignement des composants, pas l'ancrage des composants, par exemple si j'ai besoin d'un bouton OK pour rester de la même taille mais suivre le redimensionnement de la fenêtre inférieure droite. –

+0

@Gregor Peut-être que je ne comprends pas ... Si je dépose un TLayout sur le formulaire et que je place son Alignement sur alBottom, dépose un TButton sur le TLayout et positionne son alignement sur alRight, il suit bien le redimensionnement du formulaire –

+0

Cela semble fonctionner, mais cela rend la conception de l'interface graphique difficile.L'ancrage simple n'est plus disponible, maintenant je dois créer TLAyouts.C'est comme au bon vieux temps avec TPanels pour que les choses restent Avant que vous les voulez. Bienvenue à 1990 –

1

Un coup d'œil sur la propriété align révèle beaucoup plus de choix que nous avions dans Delphi précédent versions:

enter image description here

Est-ce pas résoudre votre problème (au moins partiellement).
Je me souviens d'avoir réussi pendant longtemps à utiliser les éléments imbriqués panel s et align pour mettre en page.

+0

n'est-ce pas un énorme pas en arrière. Je dois nicher TLayouts pour obtenir l'ancrage. Si je me souviens de mon Builder 5 jours, c'était une énorme douleur dans le * ss –

+1

C'est, mais au moins cela ne rend pas Firemonkey inutile, cela signifie juste qu'il y a place à amélioration. Tout le monde criait pour libérer toutes ces fonctionnalités promises. C'est même dans les fichiers (voir 'http: // docwiki.embarcadero.com/VCL/XE2/fr/FMX.Types.TControl.Anchors', mais je suppose qu'ils n'ont pas encore résolu tous les bugs, alors ils ' J'ai rendu ces Anchors privés, avec le temps, tout ira bien, moi pour ma part je suis chatouillée de rose avec la possibilité d'écrire pour iOS (où il n'y a pas de redimensionnement :-) – Johan

+0

"n'est-ce pas un énorme pas en arrière" ... oh commun - continuez à utiliser la VCL si vous n'êtes pas prêt pour quelque chose de nouveau.Il y a tellement de choses intéressantes dans Firemonkey et c'est la première version ... bien sûr, il y a encore quelques problèmes ... loin de étant inutile IMHO – jpfollenius

0

Vous pouvez utiliser des LiveBindings et des expressions pour définir les propriétés de votre contrôle en fonction du contrôle parent, bien que ce soit beaucoup de travail.

Sinon, utilisez les marges et le remplissage (comme HTML/CSS).