TVirtualStringTree ScaleBy Stretch
Я пытаюсь заставить VST автоматически изменять размеры при изменении его высоты и ширины. У меня нет этой проблемы с другими размещенными компонентами VCL, некоторые из них имеют свойство "Растянуть", такое как TImage, которое позволяет им настраиваться автоматически. VST остается упрямым и сохраняет значения nodeHeights и Column.
- Я видел Header->hoAutoResize, hoColumnResize. В этом случае AutoSizeIndex <> -1 не очень полезен, так как мне нужно уменьшить каждый столбец. Я думаю, именно поэтому они ничего не делают. Изменение AutoSizeIndex на мой последний столбец (3, потому что у меня 4 столбца) и наличие hoAutoResize = True; по-прежнему не влияет на ширину моего столбца. hoColumnResize - это параметр, который позволяет пользователю изменять размер столбцов, так что вам тоже не повезло
- Я видел TreeOptions->AutoOptions->toAutoChangeScale и toAutoSpanColumns. Я обнаружил, что toAutoSpanColumns контрпродуктивна в моем случае, так что это не так. Мой размер шрифта корректируется.
- Я нашел Tree.Scaleby, но не могу заставить его работать в мою пользу, и он не документирован в официальных документах.pdf, которые у меня есть.
- Все 4 столбца имеют minWidth 10, так что никаких проблем нет
- Все 4 имеют coEnabled, coVisible, coResizable:= True и cofixed, coSmartResize:= False fwiw
Я предполагаю, что просто нажимаю неправильные комбинации настроек или что-то в этом роде. Любые намеки были бы отличными, спасибо.
2 ответа
Из вашего поста я понимаю, что вы хотите автоматически корректировать ширину всех столбцов пропорционально, когда TVirtualStringTree
ширина меняется. Если вы хотите, чтобы это также происходило с высотами строк, вы можете просто применить следующее соответственно.
Там нет настройки для правильной ширины столбца, но это легко сделать в 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% от ширины компонентов.
Вам нужно установить Header->AutoSizeIndex в индекс вашего последнего столбца, кроме Header->hoAutoResize в true.
Примерно так, если вы хотите сделать это программно:
vt.Header.Options := vt.Header.Options + [hoAutoResize];
vt.Header.AutoSizeIndex := vt.Header.Columns.GetLastVisibleColumn;