Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
ВнизОтрисовка итема и субитемов в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c