2012-05-17 26 views
6

Làm cách nào để sử dụng các nút tùy chỉnh (hình ảnh) của riêng tôi để thay thế các nút [-]/[+] mặc định trong VST?
Tôi muốn sử dụng mũi tên thay thế (enter image description here, enter image description here), mà còn hỗ trợ chế độ giá thầu RTL (enter image description here, enter image description here).TVirtualStringTree - Cách thay đổi các nút [-]/[+]?

chỉnh sửa: Tôi biết phong cách bsTriangle (ButtonStyle). Nó không tôn trọng RTL. Tôi muốn sử dụng hình ảnh tùy chỉnh của riêng mình.

Trả lời

9

Không phải những hình ảnh đó thường trong Windows Vista và Windows 7 phải không? Điều khiển cây sẽ tự động lấy chúng trên các hệ thống đó khi bạn bật chủ đề.

Cách dễ dàng để đạt được điều gì đó gần đó là chỉ cần đặt thuộc tính ButtonStyle thành bsTriangle. Nó sẽ không chính xác là những hình ảnh được hiển thị trong câu hỏi, mặc dù. Mũi tên "trừ" sẽ trỏ thẳng xuống thay vì theo đường chéo và mũi tên "dấu cộng" sẽ cứng thay vì đường viền.

Bạn có thể cung cấp bitmap của riêng mình. Thay đổi tài nguyên VT_XPBUTTONMINUS và VT_XPBUTTONPLUS thành bất kỳ hình ảnh nào bạn muốn và đặt thuộc tính ButtonFillMode thành fmShaded.

Tôi không thấy cơ sở nào để thay đổi hình ảnh dựa trên chế độ bi-di. Bạn có thể tạo một lớp con cháu ghi đè PaintNodeButton và sau đó vẽ bất kỳ thứ gì bạn muốn. Sao chép mã vị trí từ lớp cha.

+0

Cảm ơn bạn. Có vẻ như việc ghi đè 'PaintNodeButton' là lựa chọn duy nhất. – ZigiZ

1

Xem thuộc tính ButtonStyle. Bạn không chắc nó có tôn trọng chế độ RTL bidi hay không.

+0

Tôi biết kiểu 'bsTriangle'. nó không tôn trọng RTL. Tôi muốn sử dụng hình ảnh của riêng mình. – ZigiZ

7

IIRC bạn nhận được nó bằng cách bao gồm toUseExplorerTheme trong PaintOptions. Tuy nhiên điều này cũng thay đổi giao diện lựa chọn (thành IMNSHO tốt hơn) và có thể nhiều hơn.

Ví dụ nếu tôi thả một TVirtualStringTree trên một hình thức và thêm xử lý sự kiện sau đây:

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    VT.RootNodeCount := 10; 
    VT.TreeOptions.PaintOptions := VT.TreeOptions.PaintOptions + [toUseExplorerTheme]; 
    VT.OnInitNode := VTInitNode; 
    VT.OnInitChildren := VTInitChildren; 
end; 

procedure TForm1.VTInitChildren(Sender: TBaseVirtualTree; 
    Node: PVirtualNode; var ChildCount: Cardinal); 
begin 
    ChildCount := 3; 
end; 

procedure TForm1.VTInitNode(Sender: TBaseVirtualTree; 
    ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); 
begin 
    Include(InitialStates, ivsHasChildren); 
end; 

tôi nhận được screenshot with triangular markers

Edit: Thật không may, thiết Form1.BiDiMode để bdRightToLeft sản lượng screenshot with wrong triangular markers trên Windows tiếng Đức của tôi 7. Tôi không biết nếu điều này hoạt động tốt hơn trên các hệ thống tiếng Ả Rập hoặc tiếng Do Thái.

+0

Bạn đang sử dụng phiên bản VirtualTrees nào? – ZigiZ

+1

@ZigiZ: Sự kết hợp ở đầu VirtualTrees.pas nói 'Version 5.0.0'. –

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