Форум: "Начинающим";
Текущий архив: 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