2017-04-25 1 views
2

Je cherche à obtenir un VST à redimensionner automatiquement lorsque sa hauteur et sa largeur sont modifiées. Je n'ai pas ce problème avec d'autres composants VCL placés, certains d'entre eux ont une propriété "Stretch" comme TImage, qui leur permet de s'ajuster automatiquement. Le VST reste têtu et conserve les largeurs nodeHeights et Column.TVirtualStringTree ScaleBy Stretch

  • J'ai vu Header-> hoAutoResize, hoColumnResize. Dans ce cas, AutoSizeIndex <> -1 n'est pas très utile, car j'ai besoin que chaque colonne soit réduite. Je pense que c'est pourquoi ils ne font rien. Modification de l'AutoSizeIndex à ma dernière colonne (3, parce que j'ai 4 colonnes) et ayant hoAutoResize = True; n'affecte toujours pas mes largeurs de colonnes. hoColumnResize est le paramètre qui permet à l'utilisateur de redimensionner les colonnes, donc pas de chance avec ça non plus
  • J'ai vu TreeOptions-> AutoOptions-> à AutoChangeScale et toAutoSpanColumns. J'ai découvert que toAutoSpanColumns est contre-productif dans mon cas, donc c'est désactivé. Ma taille de police est en cours d'ajustement.
  • J'ai trouvé Tree.Scaleby, mais je ne peux pas le faire fonctionner en ma faveur et il n'est pas documenté dans les documents officiels .pdf que j'ai.
  • Les 4 colonnes ont minWidth de 10, donc pas de problème il
  • Tous les 4 ont coEnabled, coVisible, coResizable: = True et coFixed, coSmartResize: = False FWIW

Je suppose que je suis juste frapper les mauvaises combinaisons de paramètres ou quelque chose. Tous les conseils seraient grands, merci.

+1

Copie possible de [Colonne de dimensionnement automatique dans TVirtualStringTree] (http://stackoverflow.com/questions/2679862/auto-sizing-column-in-tvirtualstringtree) – Kiogara

+0

Les largeurs de colonnes de dimensionnement automatique devraient fonctionner. La taille du noeud ou de la ligne de dimensionnement automatique semble être un concept plutôt inhabituel: les contrôles tels que les grilles et TListView et les applications telles que Windows Explorer ou Outlook ne le font pas. –

+0

Je pensais juste dans les tonnes d'options que VST a, il y aurait quelque chose qui ressemble fonctionnellement à "Stretch" juste avec des largeurs de colonne. Il s'avère que vous devez le faire manuellement dans OnResize ... – hzzmj

Répondre

1

De votre post, je comprends que vous voulez régler automatiquement la largeur de toutes les colonnes proportionnellement lorsque les TVirtualStringTree de changements de largeur. Si vous voulez que cela se produise également avec les hauteurs de rang, vous pouvez simplement appliquer ce qui suit en conséquence.

Il n'y a pas de réglage de la largeur de la colonne propertional, mais il est simple à réaliser en cas OnResize du TVirtualStringTree:

procedure TForm1.VSTResize(Sender: TObject); 
begin 
    VST.Header.Columns[0].Width := MulDiv(VST.Width, 50, 100); 
    VST.Header.Columns[1].Width := MulDiv(VST.Width, 30, 100); 
    VST.Header.Columns[2].Width := MulDiv(VST.Width, 20, 100); 
end; 

Dans ce qui précède, les colonnes sont maintenues 50%, 30% et 20% de la largeur des composants.

+0

Cela fonctionne bien, merci. ANode: PVirtualNode; alors que Assigned (Anode) commence VST.NodeHeight [ANode]: = trunc (VST.Height/16); ANode: = VST.GetNextVisible (ANode); fin; – hzzmj

0

Vous devez définir Header-> AutoSizeIndex à l'index de votre dernière colonne, en plus de Header-> hoAutoResize à true.

Quelque chose comme cela si vous souhaitez le faire par programme:

vt.Header.Options := vt.Header.Options + [hoAutoResize]; 
vt.Header.AutoSizeIndex := vt.Header.Columns.GetLastVisibleColumn; 
+0

J'ai édité mon poste. J'ai lu le post que vous avez lié avant de poster. Je n'arrive pas à travailler comme ça – hzzmj