Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.09;
Скачать: CL | DM;

Вниз

Отрисовка итема и субитемов в ListView.   Найти похожие ветки 

 
V.exeR ©   (2002-08-27 22:53) [0]

Я знаю, что этот вопрос три раза в день здесь задают, но у меня несколько другая бага!
Стандартная ситуёвина - надо отрисовать разные итемы в режиме vsReport во все цвета радуги. Вешаем процедуру на OnCustomDrawItem:

procedure TForm1.ListViewCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
const FileCol=tcolor($FFAAFF);
URLCol=tcolor($AFFAAA);
Begin
if Item = nil then Exit;
If IsFile(Item.Caption) Then ListView.Canvas.Brush.Color:=FileConCol
Else ListView.Canvas.Brush.Color:=URLConCol;
End;

где IsFile - процедура, проверяющая, может ли быть Item.Caption именем файла. Все работает до того момента, пока пользователь не изменяет ширину колонок. После изменения ширины колонок прога с вероятностью ~30% "слетает": начинает глючить перерисовка ВСЕХ SpeedButton"ов на форме, плюс оседает в осадок после попытки сохранить файл.
Однако если написать такой код:

procedure TForm1.ListViewCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
const FileCol=tcolor($FFAAFF);
URLCol=tcolor($AFFAAA);
Var View:TRect;
ii:LongInt;
Begin
DefaultDraw:=False;
if Item = nil then Exit;
View:=Item.DisplayRect(drBounds);
If IsFile(Item.Caption) Then ListView.Canvas.Brush.Color:=FileConCol
Else ListView.Canvas.Brush.Color:=URLConCol;
If cdsSelected in State Then ListView.Canvas.Brush.Color:=ListView.Canvas.Brush.Color-$555555;
If cdsHot in State Then
Begin
Sender.Cursor:=crHandPoint;
Sender.Canvas.Font.Style:=[fsUnderline];
Sender.Canvas.Font.Color:=TColor($FF0000);
End Else
Begin
Sender.Cursor:=crDefault;
Sender.Canvas.Font.Style:=[];
Sender.Canvas.Font.Color:=TColor($000000);
End;
Sender.Canvas.FillRect(View);
Sender.Canvas.TextOut(View.Left,View.Top,Item.Caption);
end;

и выставить OwnDraw:=True, то все вроде бы нормально. Однако при наведении мыши на Item.Caption курсор не меняется, а с ним остается нетронутым и Font.Style. Ежели курсор подвести к первому субитему, Item.Caption начинает рисоваться как надо.
Внимание, вопрос: что я неправильно делаю-то? И как отрисовать SubItems в режиме OwnDraw:=True?


 
V.exeR ©   (2002-08-27 23:05) [1]

Алло! Никто не знает, что ли?!


 
Юрий Зотов ©   (2002-08-27 23:15) [2]

OnCustomDrawSubItem.
OnAdvancedCustomDrawSubItem.


 
V.exeR ©   (2002-08-27 23:26) [3]

Вопрос прочитайте, пожалуйста, повнимательнее. Я и так использую собственное рисование! А вот как это делаете вы - я не знаю. Код в студию!


 
Юрий Зотов ©   (2002-08-28 00:08) [4]

> V.exeR © (27.08.02 23:26)

Ответ прочитайте, пожалуйста, повнимательнее.

Собственное рисование ЧЕГО Вы используете? Item"ов. А спрашиваете о чем? "Как отрисовать SubItems". А это уже совсем другое событие.

Код в студию - это без проблем. Но, может, уже лишнее?



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

Текущий архив: 2002.09.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
3-26900
demisen
2002-08-20 11:25
2002.09.09
Разделять разряды в QuickReport


14-27212
Сергей Суровцев
2002-08-07 20:24
2002.09.09
---|Ветка была без названия|---


1-27090
Radimir
2002-08-28 17:11
2002.09.09
словарная база


8-27130
Alucard
2002-05-07 15:47
2002.09.09
Flash в дельфи


8-27116
Di
2002-04-30 20:06
2002.09.09
Как