Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2015, 17:33   #1
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию ListView перекрашивание строки!

Еще один вопросик
Хотел бы всю строку где написано слово "Возврат" пометить красным цветом.
Я пробовал так сделать, но тут что-то не так.
Условие не знаю какое реализовать.

Код:

Код:
procedure TAIBook.lv1DrawItem(Sender: TCustomListView; Item: TListItem;
  Rect: TRect; State: TOwnerDrawState);
var i:integer;
var ListItems : TListItems;
begin
 with Sender do
  for i:=0 to length(Item.Caption) do begin
    if lv1.ListItems('Âîçâðàò') then canvas.Pen.Color:=clred else canvas.Pen.Color:=clblack;
    Canvas.TextOut(rect.Left+i+Canvas.TextWidth('W'),Rect.Top,Item.Caption[i]);
  end;
end;
CrystalDF вне форума Ответить с цитированием
Старый 26.02.2015, 19:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TAIBook.lv1DrawItem(Sender: TCustomListView; Item: TListItem;
  Rect: TRect; State: TOwnerDrawState);
var i:integer;
var ListItems : TListItems;
begin
 if Item.Caption<>'Возврат' then exit;
    with Sender.canvas do begin
     Pen.Color:=clred;
     TextOut(rect.Left,Rect.Top,Item.Caption[i]);
    end;
  end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2015, 05:20   #3
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

что-то по параметрам у меня не сходится... у меня есть DefaultDraw
Код:
procedure TForm1.lv1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var i:Integer;
begin
  for i:=0 to Item.SubItems.Count-1 do
    if SameText(Item.SubItems[i],'Возврат') then
    begin
      Sender.canvas.Font.Color:=clred;
      Break;
    end;
  DefaultDraw:=True;
end;
или

Код:
procedure TForm1.lv1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if SameText(Item.SubItems[SubItem-1],'Возврат') then
    Sender.canvas.Font.Color:=clred
  else
    Sender.canvas.Font.Color:=clBlack;
end;
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 27.02.2015 в 05:30.
Slym вне форума Ответить с цитированием
Старый 27.02.2015, 10:51   #4
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию

Эти 3 варианта не помогают, не красится к красный (
CrystalDF вне форума Ответить с цитированием
Старый 27.02.2015, 10:52   #5
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию

Код:
var i:Integer;
var DefaultDraw: Boolean;
begin
  for i:=0 to Item.SubItems.Count-1 do
    if SameText(Item.SubItems[i],'Возврат') then
    begin
      Sender.canvas.Font.Color:=clred;
      Break;
    end;
  DefaultDraw:=True;
end;
И так пробую не получается
CrystalDF вне форума Ответить с цитированием
Старый 27.02.2015, 11:24   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
function FindText(Item: TListItem; Text: String): Boolean;
var i: Integer;
begin
  Result:=AnsiSameText(Item.Caption,Text);
  if not Result then
    for i:=0 to Item.SubItems.Count-1 do begin
      Result:=AnsiSameText(Item.SubItems[i],Text) and (i<TListView(Item.ListView).Columns.Count);
      if Result then Exit;
    end;
end;

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if FindText(Item,'Возврат') then Sender.canvas.Font.Color:=clred
                              else Sender.canvas.Font.Color:=clBlack;
end;

procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if FindText(Item,'Возврат') then Sender.canvas.Font.Color:=clred
                              else Sender.canvas.Font.Color:=clBlack;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.02.2015, 17:41   #7
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

у тебя не стандартный TListView походу
у стандартного декларация для CustomDrawItem под delphi 7 такая
Код:
procedure CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
т.е. в параметрах есть DefaultDraw
колись что за компонент...
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перекрашивание текста в двуцветный Chudо Помощь студентам 2 10.03.2014 19:35
Удалить из ListView определённые строки Shouldercannon Общие вопросы Delphi 2 31.08.2011 14:02
Изменить цвет части строки в ListView zver777 Общие вопросы Delphi 5 21.06.2010 14:07
сброс выбраной строки в listview TaTT DoGG Общие вопросы .NET 5 02.03.2010 01:32
Перекрашивание строк DBGrid по условию ГОСЕАН БД в Delphi 4 11.05.2009 23:19