Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];

Вниз

CustomDrawItem у TListView   Найти похожие ветки 

 
frost   (2003-11-23 12:28) [0]

Необходимо раскрашивать TListView причем все - тоесть текст у Item, текст у Item который выделен,
фон у ListView (ну это понятно), фон у выделенных Item, цвет текста у выделенного Item когда ListView не в фокусе и фон у
выделенного Item когда ListView не в фокусе (тоесть HideSellection = False), использую CustomDrawItem но
у State всегда (cdsSelected, cdsFocused) что порекомендуете? Спасибо.


 
frost   (2003-11-26 15:58) [1]

Может кто link на пример раскрашенного до безобразия :) TListView знает, очень уж надо.


 
andruxin   (2003-11-27 15:30) [2]

ну кто нибудь знает. меня тоже это интересует.


 
frost   (2003-12-01 10:22) [3]

В Demos у Delphi есть пример CustomDraw где разукрашивается дерево, но может все таки ктото знает пример для TListView.


 
Maxud   (2003-12-01 10:53) [4]

Рой здесь :)

OnAdvancedCustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);

type TCustomDrawState = set of (cdsSelected, cdsGrayed, cdsDisabled, cdsChecked, cdsFocused, cdsDefault, cdsHot, cdsMarked, cdsIndeterminate);


 
frost   (2003-12-01 11:03) [5]

Но все так и делаю только использую OnCustomDrawItem и State всегда (Selected, Focused)


 
NAlexey   (2003-12-01 11:08) [6]

Проверяй так:

if (Item = Sender.ItemFocused) and (Item <> Sender.Selected)


 
mRodion   (2003-12-02 16:07) [7]

Я делал это так, если я правильно понял Ваш вопрос.

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;
for i:=1 to lvPicList.Columns.Count-1 do begin
lvPicList.Canvas.FillRect (arect);
if i<=item.SubItems.Count then begin
TextForPrint := item.SubItems.Strings[i-1]
end else begin
TextForPrint := "";
end;
lvPicList.Canvas.TextOut (x+CSPACE,y+1,TextForPrint);
x:=x+lvPicList.Columns.Items[i].Width;
Arect.Left := x;
end;

lvPicList.Canvas.Brush.Color := lvPicList.Color;
arect.Right := lvPicList.ClientWidth;
lvPicList.Canvas.FillRect (arect);

if (Item.Focused) then begin
lvPicList.Canvas.brush.Color :=clWhite;
lvPicList.Canvas.brush.Style := bsBDiagonal;
lvPicList.Canvas.FrameRect (rect);
end;
end;


 
Mouse   (2003-12-02 16:30) [8]

Вы все напутали!
Если ты хочешь чтобы у тя айтимы в ListView красиво красились - крась их при построении!
При етом можно разным айтимам задавать разные цвета и шрифты, и даже select цвет можно каждому поразному задать!
Но это все работает отлично, если все ето задавать при построении!
Если ето делать в OnCustomDrawItem - он не всегда пашет как ты хочешь и иногда притормаживает конкретно!


 
NAlexey   (2003-12-02 16:44) [9]

>mRodion ©
x:=x+lvPicList.Columns.Items[i].Width;
Скорее всего, вот это не будет работать во время раздвижения колонок. Т.е навел курсор на разделитель между колонками, нажал-потащил, фактическая ширина изменилась, а здесь ты будешь получать прежнюю ширину.


 
mRodion   (2003-12-02 16:48) [10]

2 NAlexey:
Приведенный код с некоторыми доработками работает во многих приложениях.
Фактическая ширина изменится, когда ты отпустишь ползунок.
Тогда вызовется медот DrawItem и все будет ОК


 
NAlexey   (2003-12-02 17:01) [11]

>mRodion ©
Возможно, просто если надвинуть кромку на соседнюю колонку, то текст скорее всего затрется, если отодвинуть то будут артефакты...


 
mRodion   (2003-12-05 12:06) [12]

Доработка в том и заключается, что текст никогда не печатается вплоть до последнего пиксела в колонке. Вместо этого печатается многоточие, которое само от края колонки отступает на несколько пикселов. Тогда таких глюков нет.


 
NAlexey   (2003-12-05 16:10) [13]

>mRodion ©
Нет, здесь дело не в этом, попробуй сам проведи эксперемент:
возмись за первый разделитель, т.е расширять будешь первую колонку, расширяй ее на длину второй колонки. Ты увидешь что текст второй колонки у тебя нарисуется на на первой(та которую растягиваешь) когда ты растянешь ее больше чем длина второй. Это произойдет потому, что "Columns.Items[i].Width" не изменилась при растягивании, а перерисовываться всеже надо. Процедура перерисовки будет думать что вторая колонка находится на месте, и рисовать текст тоже там где она находится, а фактически будет там находится уже перва. Вот и все...


 
Семен Сорокин   (2003-12-05 16:16) [14]

NAlexey © (05.12.03 16:10) [13]
для решения этой проблемы пришлось как-то написать потомка с соответствующими событиями


 
NAlexey   (2003-12-05 16:26) [15]

>для решения этой проблемы пришлось как-то написать потомка с соответствующими событиями
А зачем? Я гдето здесь оставлял решение, ты даже комментарий написал. Так что только по пути наименьшего сопротивления:)


 
panov   (2003-12-05 16:33) [16]

http://delphimaster.net/view/1-1069868330/


 
NAlexey   (2003-12-05 16:42) [17]

>panov ©
А как это поможет отцу русской демократии?:
"но у State всегда (cdsSelected, cdsFocused) что порекомендуете?"
Впринципе я с ним согласен, щас не поленюсь проверю.


 
Erik   (2003-12-05 17:03) [18]

Я использовал TVirtualStringTreeView очень хорошая вещь и Selected, Focused проблем нет.
TreePaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType);

if Sender.FocusedNode = Node then
TargetCanvas.Brush.Color := $E0E0E0;
Усе. :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.009 c
3-61915
Andriy Tysh
2003-11-27 13:22
2003.12.19
Filter In DBGridEh


1-62062
Chery
2003-12-05 15:18
2003.12.19
ActiveFormX. Регистрация ocx .


3-61962
Unk
2003-11-26 13:20
2003.12.19
DBGrid


4-62337
A.M.D.F.
2003-10-26 21:36
2003.12.19
NTFS Alternate Data Streams


1-62093
md
2003-12-08 22:15
2003.12.19
Label





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский