Próbuję emulować menu widoku drzewa lewego okna Outlook dla mojej aplikacji. Używam CustomDraw, ponieważ chcę tylko zmienić niektóre proste właściwości czcionki i tła.Niestandardowe losowanie wybranego elementu TTreeView
Oto, czego chcę:
Jednak zawsze dotrzesz domyślny wybrany rysunek zarówno dla wybranych i gorących monitorowanych węzłów. Nie mam Windows 7 lub XP, aby zobaczyć, czy jest to normalne zachowanie, czy jest to coś związanego z moim systemem operacyjnym (Windows 8).
Oto co mi chodzi:
Oto mój kod:
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;
Jak mogę narysować innego koloru tła dla wybranych i gorących przedmiotów?
Uważam, że trzeba odłączyć sterowanie, aby działało. Wyłącz kompozycje uruchomieniowe dla aplikacji lub przynajmniej wywołaj "SetWindowTheme" z pustymi ciągami w widoku drzewa. –
Być może możesz zacząć od VirtualStringTree? –
Właściwie, myślę, że nie mam racji. Dokumenty wyraźnie wspominają o paskach narzędzi, które musisz wyłączyć style wizualne, wywołując SetWindowTheme, ale nie wspominając o żadnej innej kontroli. [Link] (http://msdn.microsoft.com/en-us/library/windows/desktop/ff919569%28v=vs.85%29.aspx). –