Tôi đang cố gắng mô phỏng trình đơn xem cây trong khung bên trái của Outlook 2013 cho ứng dụng của tôi. Tôi đang sử dụng CustomDraw vì tôi chỉ muốn thay đổi một số thuộc tính phông chữ và nền đơn giản.TTreeXem bản vẽ tùy chỉnh của các mục được chọn
Dưới đây là những gì tôi muốn:
Tuy nhiên, tôi luôn nhận được sự mặc định chọn bản vẽ cho cả hai nút theo dõi được lựa chọn và nóng. Tôi không có Windows 7 hoặc XP để xem đây có phải là hành vi bình thường hay không, nếu nó liên quan đến hệ điều hành của tôi (Windows 8).
Đây là những gì tôi nhận được:
Dưới đây là mã của tôi:
procedure TMainForm.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Node.Level = 1 then
Sender.Canvas.Font.Size := Sender.Canvas.Font.Size + 2;
if cdsHot in State then
Sender.Canvas.Brush.Color := $00F7E6CD
else if (cdsSelected in State) or (cdsFocused in State) or
(cdsChecked in State) then
Sender.Canvas.Brush.Color := $00F2F2F2
else
Sender.Canvas.Brush.Color := $00DEDEDE;
DefaultDraw := true;
end;
Làm thế nào tôi có thể rút ra một nền màu khác nhau cho các mục đã chọn và nóng?
Tôi tin rằng bạn phải bỏ chủ đề kiểm soát để tính năng này hoạt động. Vô hiệu hóa các chủ đề thời gian chạy cho ứng dụng, hoặc ít nhất là gọi 'SetWindowTheme' với các chuỗi rỗng trên treeview. –
Có lẽ bạn có thể bắt đầu với VirtualStringTree? –
Thực ra, tôi nghĩ tôi không đúng. Các tài liệu đề cập cụ thể cho các thanh công cụ mà bạn phải tắt kiểu trực quan bằng cách gọi SetWindowTheme, nhưng không đề cập đến bất kỳ điều khiển nào khác. [Link] (http://msdn.microsoft.com/en-us/library/windows/desktop/ff919569%28v=vs.85%29.aspx). –