CustomDrawItem у TListView
Необхідно розфарбовувати TListView причому все - тобто текст у Item, текст у Item який виділений, фон у ListView (ну це зрозуміло), фон у виділених Item, колір тексту у виділеного Item коли ListView не у фокусі і фон у виділеного Item коли ListView не у фокусі (тобто HideSellection = False), використовую CustomDrawItem але у State завжди (cdsSelected, cdsFocused) що порекомендуєте? Дякую.
Може хтось link на приклад розфарбованого до неподобства :) TListView знає, дуже вже треба.
ну хто небудь знає. мене також це цікавить.
У Demos у Delphi є приклад CustomDraw де прикрашається дерево, але може все-таки хтось знає приклад для TListView.
Рой тут :) OnAdvancedCustomDrawSubItem( Sender: TCustomListView; Item: TListItem; SubItem: Integer;State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
typeTCustomDrawState= set of (cdsSelected, cdsGrayed, cdsDisabled, cdsChecked, cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate);
Але все так і роблю тільки використовую OnCustomDrawItem і State завжди (Selected, Focused)
Перевіряй так: if (Item = Sender.ItemFocused) and (Item <> Sender.Selected)
Я робив це так, якщо я правильно зрозумів Ваше запитання.
procedure TfmLane.lvPicListDrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState); const CSPACE = 10; var i,j,k:integer; x,y,x2,y2:integer; aRect:TRect; TextForPrint:string; begin lvPicList.Canvas.Brush.Color := CbackgroundColor1; lvPicList.Canvas.Font.Color := lvPicList.Font.Color;
if (odSelected in State) then begin lvPicList.Canvas.Brush.Color := clHighlight; lvPicList.Canvas.Font.Color:= clHighlightText; end;
aRect: = Rect; x:=rect.Left; y:=rect.top; lvPicList.Canvas.FillRect (rect); lvPicList.Canvas.Pen.Color := clRed;
TextForPrint := item.Caption; lvPicList.Canvas.TextOut (x+CSPACE,y+1,TextForPrint); x:=x+lvPicList.Columns.Items[0].Width; Arect.Left: = x; для i:=1 до lvPicList.Columns.Count-1 до початку lvPicList.Canvas.FillRect (arect); if i
Ви все наплутали! Якщо ти хочеш щоб у тебе айтими в ListView красиво фарбувалися - фарбуй їх при побудові! При цьому можна різним айтимам задавати різні кольори та шрифти, і навіть select колір можна кожному по-різному задати! Але це все працює добре, якщо все це ставити при побудові! Якщо це робити в OnCustomDrawItem - він не завжди оре як ти хочеш і іноді пригальмовує конкретно!
2 NAlexey: Наведений код з деякими доробками працює у багатьох додатках. Фактична ширина зміниться, коли ти відпустиш повзунок. Тоді викличеться медот DrawItem і все буде ОК
Доробка в тому і полягає, що текст ніколи не друкується до останнього пікселя в колонці. Натомість друкується багатокрапка, яка сама від краю колонки відступає на кілька пікселів. Тоді таких глюків нема.
Я використав TVirtualStringTreeView дуже хороша річ і Selected, Focused проблем немає. TreePaintText(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);