#delphi #tlistview
#delphi #tlistview
Вопрос:
Я использую TTNTListView в Delphi 7. Для него установлено значение vsReport. При событии OnCustomDrawSubItem я использую этот код:
procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
if SubItem = 2 then
if (Item.SubItems.Strings[1] = Text1) or (Item.SubItems.Strings[1] = Text2) then
Sender.Canvas.Font.Color := clGreen
else
Sender.Canvas.Font.Color := clRed;
end;
Проблема в том, что все подпункты>= 3 отображаются тем же цветом, что и подпункт 2. Я проверил и для SubItem> = 3 отправителя.Холст.Шрифт.Цвет — clBlack, но они отображаются с помощью clRed и clGreen.
Если это проблема в моем коде, пожалуйста, покажите мне, как это исправить.
Если это ошибка, возможно, кто-то знает обходной путь.
Спасибо.
Ответ №1:
Я бы предположил, что вам просто нужно явно задать цвет для других случаев. Поскольку вы этого не делаете, состояние холста сохраняется. Попробуйте это:
procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
Color: TColor;
begin
if SubItem = 2 then
if (Item.SubItems.Strings[1] = Text1) or (Item.SubItems.Strings[1] = Text2) then
Color := clGreen
else
Color := clRed;
else
Color := clBlack;
Sender.Canvas.Font.Color := Color;
end;
Комментарии:
1. Спасибо, но это не работает. Как я уже сказал, я проверил, и для подпунктов>= 3 уже установлен clBlack, поэтому установка его на clBlack не имеет никакого эффекта.
2. У меня нет
TTNTListView
, но это выглядит как расширение стандартного представления списка,TListView
. ПриTListView
этом ваш код ведет себя так, как вы описали, и мой код ведет себя правильно, т. Е. Все столбцы черные, кроме столбца 3 (подпункт 2). Итак, если мой код, который работает для меня, не работает для вас, то либо 1. компонент TNT отличается каким-то важным образом, либо 2. у вас есть больше кода, который усложняет проблему. Попробуйте запустить только с представлением списка TNT, используя мой код. Должен быть в состоянии сузить его достаточно легко.3. Похоже, это 1. Я проверил в отдельной программе: с TListView работает нормально, с TNTListview — нет. Есть идеи ..?
4. Можете ли вы проверить еще раз. Похоже, что элемент управления TNT является производным от стандартного элемента управления Delphi, а событие, которое вы обрабатываете, является событием Delphi. Если он действительно ведет себя по-другому, то, несомненно, это ошибка. В таком случае, почему бы не использовать стандартный компонент?
5. Да, он ведет себя по-другому. И я не могу использовать стандартный компонент, потому что TNT = Unicode, в Delphi 7 стандартный компонент не является Unicode. Для этого проекта я не могу использовать более новую версию Delphi.