2013-11-14 15 views
6

Tôi có VST với 3 cột đồng đều chiếm không gian sẵn có.Các cột VirtualStringTree sẽ áp dụng kích thước khi một cột bị ẩn

(Tôi đã thiết hoAutoSpring trong Header.Options và tất cả các cột có cột [x] .Option có coAutoSpring nhóm.)

Bây giờ tôi muốn để có thể ẩn các cột cuối cùng và duy trì rằng các cột khác đồng đều lấy không gian trống (một chút giống như một điều khiển với alClient).

Khi tôi chỉ đặt cột không nhìn thấy được (xem bên dưới), khoảng trống được lấy bởi cột sẽ không được sử dụng.

VST.Header.Columns[2].Options:=VST.Header.Columns[2].Options - [coVisible]; 

Khi tôi đặt tiêu đề.Options.hoAutoResize thành True và đặt tiêu đề.AutoSizeIndex thành 1 thì cột thứ hai sẽ chiếm hết không gian mới.

Có phương pháp nào để yêu cầu các cột lấp đầy không gian có sẵn và thay đổi kích thước đồng đều không?

Ảnh chụp màn hình:

enter image description here

+3

+1 một mình trong hình ảnh. Câu hỏi đầu tiên rất hay. Chào mừng bạn đến với SO! – jpfollenius

+0

Nó chỉ ra rằng 'AutoFitColumns' với' smaAllColumns' không hiển thị hành vi tôi mong đợi. Tôi đã xóa câu trả lời của mình. – jpfollenius

+0

@jpfollenius: Cảm ơn! Tôi cực kỳ ngạc nhiên khi tôi nhanh chóng tìm thấy câu trả lời chất lượng cao ở đây. Tôi nghĩ rằng tôi sẽ ở lại đây một lúc :) – ralfiii

Trả lời

0

Nhờ tất cả những câu trả lời chất lượng rất nhanh và cao của bạn!

Như có vẻ như là không có xây dựng theo cách để giải quyết vấn đề của tôi đã được mã hóa đó theo cách sau (chỉ trong trường hợp ai đó chạy vào một vấn đề tương tự):

// Show/hide a column and spread the space on all other visible columns 
// so that the proportions remain the same (as if AutoSpring was used) 
procedure ChangeColumnVisibility(Tree: TVirtualStringTree; Column: TColumnIndex; 
    NewVisible: boolean); 
var Col : TVirtualTreeColumn; 
begin 
    Col:=Tree.Header.Columns[Column]; 
    if not (NewVisible xor (coVisible in Col.Options)) then 
     Exit; 

    if not NewVisible then 
    begin 
      Col.Options:=Col.Options - [coVisible]; 
      Tree.Header.ResizeColumns(Col.Width, 0, Tree.Header.Columns.Count-1); 
    end 
    else 
    begin 
      Tree.Header.ResizeColumns(-Col.Width, 0, Tree.Header.Columns.Count-1); 
      Col.Options:=Col.Options + [coVisible]; 
    end; 
end; 


procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ChangeColumnVisibility(VST, 2, not (coVisible in VST.Header.Columns[2].Options)); 
end; 
+0

Bạn đã cố gắng hiển thị cùng một cột bạn ẩn theo cách này? Bằng cách đặt chiều rộng cột "phụ" theo cách thủ công, bạn giữ cho cột tự động hóa đó chỉ là một khoảng trống nhỏ nếu bạn hiển thị lại nó. – TLama

+0

Bạn nói đúng. Header.Options.hoAutoResize phải là false để điều này hoạt động đúng. (Tôi đã thiết lập Header.options.hoAutoSpring và tôi đã thiết lập coAutoSpring cho tất cả các Cột trong ứng dụng của tôi) – ralfiii

+0

chỉ vấp trên Tree.Header.ResizeColumns đã làm cho mã rõ ràng hơn nhiều - chỉnh sửa mã trong bài đăng của tôi ở trên. – ralfiii

Các vấn đề liên quan