Главная страница
    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.45 MB
Время: 0.006 c
14-27166
RV
2002-08-12 17:54
2002.09.09
в продолжение Есть ли жизнь на Марсе


3-26865
Slin
2002-08-19 02:08
2002.09.09
Update


1-26970
Tornado
2002-08-27 14:51
2002.09.09
Пдскажите плиз


14-27225
grinn
2002-08-14 19:58
2002.09.09
Delphi и dll


3-26933
mas_alexey
2002-08-20 18:58
2002.09.09
Создание локальной БД





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский