2017-04-25 142 views
2

我試圖讓VST在其高度和寬度改變時自動調整大小。 我沒有與其他放置VCL組件的問題,其中一些有像TImage一樣的屬性「拉伸」,它可以讓它們自動調整。 VST保持固定並保持節點高度和列寬度。TVirtualStringTree ScaleBy Stretch

  • 我看過Header-> hoAutoResize,hoColumnResize。在這個問題上,AutoSizeIndex <> -1不是很有用,因爲我需要每列都縮小。我想這就是爲什麼這些什麼都不做。 將AutoSizeIndex更改爲我的最後一列(3,因爲我有4列)並且hoAutoResize = True;仍然不會影響我的列寬度。 hoColumnResize是讓用戶調整列大小的設置,所以沒有運氣,
  • 我看到TreeOptions-> AutoOptions-> toAutoChangeScale和toAutoSpanColumns。 我發現在我的情況下,自動彈跳列的反作用,所以這是關閉。我的字體大小正在調整。
  • 我找到了Tree.Scaleby,但我無法讓它對我有利,它在我的官方.pdf文檔中沒有記錄。
  • 所有4列有10 minWidth,所以沒有問題,有
  • 所有4已coEnabled,coVisible,coResizable:= True和coFixed,coSmartResize:=假FWIW

我想我只是打錯誤的設置組合或其他東西。 任何提示都會很棒,謝謝。

+1

可能重複的[Automated sizing column in TVirtualStringTree](http://stackoverflow.com/questions/2679862/auto-sizing-column-in-tvirtualstringtree) – Kiogara

+0

自動調整列寬應該可以工作。 Auto-Sizing node-/line-height看起來像一個相當不尋常的概念:像Windows資源管理器或Outlook這樣的控件(如Grids和TListView)和應用程序不會這樣做。 –

+0

我只是認爲在VST有大量的選項中,會有一些功能類似於「拉伸」的東西,只是列寬。事實證明,你必須在OnResize中手動完成... – hzzmj

回答

1

從你的文章,我知道你是想自動調整所有列比例時TVirtualStringTree寬度變化的寬度。如果你希望這也發生在行高,你可以相應地應用以下內容。

沒有設定爲一個propertional列的寬度,但它是簡單的OnResize事件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; 

在上文中,列被保持爲50%,30%和20%的組件寬度。

+0

這很好,謝謝。 ANode:PVirtualNode;而分配(Anode)開始VST.NodeHeight [ANode]:= trunc(VST.Height/16); ANode:= VST.GetNextVisible(ANode);結束; – hzzmj

0

除了Header-> hoAutoResize爲true之外,您需要將Header-> AutoSizeIndex設置爲您最後一列的索引。

事情是這樣的,如果你想以編程方式做到這一點:

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

我編輯了我的文章。我已閱讀您發佈之前鏈接的帖子。我不明白它的工作 – hzzmj