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

Вниз

Неясности с отрисовкой SubItem у ListView   Найти похожие ветки 

 
Korneley ©   (2007-09-11 14:55) [0]

Рисуя на OnCustomDrawSubItem столкнулся со следующим: не могу изменить свойства Sender.Canvas.Font, т.е. в коде-то я меняю, но рисуется все равно тем Font, что задан в свойствах ListView. DefaultDraw выставляю в false, у ListView: ViewStyle = vsReport, RowSelect = true.
 Пользую BDS2006, но в D7 тоже самое. Может кто знает как это побороть? Предложение не трогать DefaultDraw не канает: Font-то я поменяю, а вот Pen проигнорируется  напрочь :( Смотрел на RSDN, там те же советы: менять Font.Style, дык я так и делал... Короче помогите, кто чем может, пожалуйста :)


 
DVM ©   (2007-09-11 15:01) [1]


> Korneley ©   (11.09.07 14:55)  

Ты код обработчика OnCustomDrawSubItem то бы показал.


 
Korneley ©   (2007-09-11 15:15) [2]

Ну, к примеру:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
 Item: TListItem; SubItem: Integer; State: TCustomDrawState;
 var DefaultDraw: Boolean);
var i, tw : integer;
   r : TRect;
   s : string;
begin
 with TListView(Sender).Canvas do begin
   if SubItem in [1, 2] then begin
     s := Item.SubItems[SubItem - 1];
     tw := TextWidth(s);
     r := Item.DisplayRect(drLabel);
     r.Left := 0;
     for i := 0 to subitem - 1 do inc(r.Left, TListView(Sender).Columns[i].Width);
     r.Right:= r.Left + TListView(Sender).Columns[SubItem].Width - 1;
     case SubItem of
     1:Pen.Color := clLime;
     2:Pen.Color := clRed;
     end;
     if (cdsFocused in State)
     then Brush.Color := Pen.Color;
     inc(r.Left); inc(r.Top); dec(r.Right); dec(r.Bottom);
     Rectangle(r);
     Font.Style := Font.Style + [fsBold];
     Font.Color := clBlue;
     inc(r.Left); inc(r.Top); dec(r.Right); dec(r.Bottom);
     TextRect(r, r.Left, r.Top - 2, s);
     DefaultDraw := false;
   end;
 end;
end;

ListView, как можно догадаться из трех колонок (напомню, стиль vsReport)


 
DVM ©   (2007-09-11 16:05) [3]


> Korneley ©

а почему бы тебе самому не выводить надписи своим шрифтом ?


 
korneley ©   (2007-09-11 16:22) [4]

Чего-то я туплю... Вообще (как я считал) если изменить свойства у Canvas.Font, то последующий Canvas.TextRect/TextOut должен выводить текст уже с этими самыми свойствами фонта. И что значит: "_своим_ шрифтом"? Ты предлагаешь самому создать экземпляр TFont и потом его "пристегивать" к Canvas от ListView? Так и до DC доберемся... :)  Или я все же тупой...:( Поясни, пожалуйста, свою реплику, а то я не догоняю, что именно ты имел в виду.


 
DVM ©   (2007-09-11 16:27) [5]


> Поясни, пожалуйста, свою реплику, а то я не догоняю, что
> именно ты имел в виду

Я имел ввиду, что выводи надпись сам Canvas.TextOut() следом за назначением шрифта.


 
korneley ©   (2007-09-11 16:37) [6]

Дык, я так и делаю!!! cм. with TListView(Sender).Canvas do begin
в начале тела метода. Иначе как бы я вообще рисовал... Пробовал и без with , результат тот же, что впрочем, не удивляет (не сам результат, а повторяемость опыта). Причем добавлю, что при  DefaultDraw=true, шрифт меняется, но при этом я могу рулить только Brush.Color, да и то только если тема не Selected


 
DVM ©   (2007-09-11 16:44) [7]


> Дык, я так и делаю

Я не увидел TextRec

Я бы вообще посоветовал выставить ListView стиль OwnerDraw := true и выполнять отрисовку всего в OnDrawItem. Во-первых, это не глючит никогда, во-воторых, это не будет глючить в Viste-е.


 
korneley ©   (2007-09-11 17:04) [8]


> Я бы вообще посоветовал выставить ListView стиль OwnerDraw
> := true

Это-то понятно... Но рисовать придется чуть больше, да и вопрос: "почему не работает?" так и останется... Спасибо за участие, вероятно так и сделаю. "Хочешь красиво - рисуй ВСЕ сам" :)


 
DVM ©   (2007-09-11 17:09) [9]


> да и вопрос: "почему не работает?" так и останется

У меня были такие же проблемы, похоже в ТListView есть ошибки в реализации методов OnCustomDrawSubItem() он OnAdvancedCustomDrawSubItem(). Кое как поборол, но в Vista все вылезло опять.

Перенес все OnDrawItem и забыл.


 
korneley ©   (2007-09-11 17:18) [10]

Да, понятно. Еще раз спасибо, просто сначала надо было сделать быстро, теперь сделаем правильно...


 
{RASkov} ©   (2007-09-11 17:31) [11]

> [7] DVM ©   (11.09.07 16:44)
> глючить в Viste-е.

который раз уже это слышу....
Вот один товарищ, я ему дал программку именно с OnCustomDrawSubItem, OnAdvancedCustomDrawSubItem и OwnerDraw := false а у него виста, должен мне прислать скрины.... вот все жду, а он не шлет.... но говорит, что все рисуется нормально....
Но дело в том, что я не видел как моя программа выглядит в висте, а он не видел как она выглядит под XP :)
В чем там хоть косяк-то? )


 
DVM ©   (2007-09-11 17:33) [12]


> .... но говорит, что все рисуется нормально....

Там иногда получается. что как не крути, а поверх нарисованного тобой система рисует еще свое что-то при включенных темах.

Домой дойду скрин выложу и код его создающий, если не забуду.


 
{RASkov} ©   (2007-09-11 20:07) [13]

> [12] DVM ©   (11.09.07 17:33)
> Домой дойду скрин выложу и код его создающий, если не забуду.

Ок.



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

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

Наверх





Память: 0.48 MB
Время: 0.074 c
2-1189326951
Jimmy
2007-09-09 12:35
2007.10.07
Refresh собственного компонента при изменении свойства


2-1189341140
Yozch1
2007-09-09 16:32
2007.10.07
Как убрать ушки в PageControl


4-1175864460
tytus
2007-04-06 17:01
2007.10.07
как получить доступ к кнопкам на панели задач?


2-1189513887
Mariya
2007-09-11 16:31
2007.10.07
Напоминание в Delphi


1-1185338016
DmitriyZ
2007-07-25 08:33
2007.10.07
Как зарарить файл в программе ?





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