Delphi: procédure de programmation pour régler visuelle de la commande de composants avec align = alTop
J'ai un formulaire avec un certain nombre de panneaux, chacun de qui a Align=alTop, donc ils se comparent bien à partir du haut de la forme.
Cependant, je veux changer dynamiquement l'apparence de l'ordre de ces panneaux - je.e, les déplacer vers le haut et vers le bas. Quelle est la meilleure façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez facilement passer d'un alignée en haut du panneau vers le haut par l'établissement de ses Haut propriété 0. Le faire dans le sens inverse demandé de commande (panneau du bas) et vous avez terminé.
Déplacer de la même façon que vous feriez déplacer au moment de la conception avec la souris: Régler le courant du panneau
Top
propriété à un de moins que leTop
propriété de le panneau que vous voulez être en dessous du panneau en cours. La VCL de prendre soin de tout le reste.Si vous devez vous déplacer de plusieurs panneaux, commencer avec
BeginDeferWindowPos
. Régler tous les panneaux à ce que les coordonnées que vous voulez avecDeferWindowPos
, et ensuite les faire tous passer à la fois avecEndDeferWindowPos
.DeferWindowPos
. Mais n'est-ce pasDisableAlign
/EnableAlign
plus facile?DeferWindowPos
, la fenêtre ne fait pas bouger jusqu'à ce que vous appelezEndDeferWindowPos
. Si vous vous déplacez beaucoup de windows, qui permet d'éviter le scintillement que les positions de certains windows mis à jour avant les autres ont déménagé. Aussi loin que je peux dire,DisableAlign
n'empêche pas les contrôles de déplacer n'importe où, juste le parent de l'alignement de l'application. Je ne peux pas juger de ce qui est mieux.Je suggère la construction d'un cadre où la dynamique de supprimer/ajouter des formes à partir de/à leur contrôle parent. En général, l'ordre de la création ou de l'extension est de l'ordre visuel, mais à partir de votre question, je comprends que vous souhaitez que la commande soit à changer durant la vie de l'application, il suffit donc de changer l'origine de la création de l'ordre ne sera pas assez.
Afin de modifier l'ordre, essayez:
À faire l'essai d'un haut-alignés
TGridPanel
avec une colonne et n lignes au lieu --- re-commande de haut-alignés panneaux est un peu de douleur, vraiment.(Note:
TGridPanel
est disponible en Delphi 2007 et, si je me souviens bien).TGridPanel.ParentBackground
àTrue
? J'ai penséTPanel
descendants pourraient être transparente de cette façon...Si vous modifiez le haut du panneau de l'ordre de visuellement panneau de changement.
Essayez ceci (tous les panneaux alignés altop et avec la même Hauteur):
PANEL0
PANEL1
SÉANCE 2
PANEL3
PANEL4
À OnClick cas de tous les panneaux ce faire:
Si vous cliquez sur un panneau, il se déplace vers le haut d'une position.
C'est l'idée. Modifier le Haut de X pixels.
En même temps, si vous faites cela:
Le panneau jusqu'à 2 positions.
AJOUTÉ: Si vous utiliser le Drag&Drop, c'événements retour à la position (X et Y); Avec la position initiale et la position finale, vous pouvez calculer la marche internationale de haut pour assigner à la commission.
Excuse forme mon mauvais anglais.
ce qui concerne
J'ai utilisé le code suivant:
selon mon souhait
Panel_1
Panel_2
Panel_3
Panel_4
Je sais que c'est un vieux post, mais, fondamentalement, m'a aidé à - l'idée de la définition de la propriété top de zéro.
Je ne peux pas utiliser l'idée de par programmation à définir la position de cause c'est à l'application l'utilisateur peut choisir d'afficher quelques cartes sur l'application et puis, tous les panneaux de l'enfant (parent) de la teecharts sont aligner altop.
J'ai mis leur propriété top de 0 sur l'ordre inverse et alors juste visible true ou false en fonction de la saisie de l'utilisateur...
Grâce.
Les derniers seront les premiers.