Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Задать цвет фона строки i в ListView [D6, Win2k, WinXP]


Progh ©   (2005-02-09 14:43:00) 

Как задать цвет фона строки i в ListView. В интернете нашел, только как задать цвет фона в обработчике ListViewCustomDrawItem. А как задать его скажем при нажатии на кнопку ?


Kray   (2005-02-11 10:00:00) [1]

Вариант:
множество в котором хранить строки цвет которых должен быть иным.
соотв. при отрисовке проверять наличие в этом множестве номера строки.


ЮЮ   (2005-02-11 08:14:00) [2]

ты читать умеешь или как? именно в CompListCustomDrawItemдолжен быть код, который рисует 0-ую строку синим цветом

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
 Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
 if odSelected in State then
   Sender.Canvas.Brush.Color := clSilver
 else
   Sender.Canvas.Brush.Color := TListView(Sender).Color;
 Sender.Canvas.FillRect(Rect);
 Sender.Canvas.Font.Assign(TListView(Sender).Font);
 // используем  Item.Data для хранения цвета
 Sender.Canvas.Font.Color := Tcolor(Item.Data);
 Sender.Canvas.TextRect(Rect, Rect.Left, Rect.Top, Item.Caption);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if ListView1.Selected <> nil then begin
   // меняем цвет текущего итема
   ListView1.Selected.Data :=
     Pointer(RGB(Random(255), Random(255), Random(255)));
   ListView1.Repaint;
 end;


Progh   (2005-02-11 08:05:00) [3]


>  [5] ЮЮ ©   (11.02.05 07:47)


Обратите внимание на


SetColor := true;
_Color := __Color;
b := false;
CompListCustomDrawItem(CompList.Items.Owner,CompList.Items.Item[Field],State,b);
CompList.Items[Field].Selected := not CompList.Items[Field].Selected;
CompList.Items[Field].Selected := not CompList.Items[Field].Selected;
SetColor := false;


Тут переменной SetColor устанавливается true, также вызывается обработчик
CustomDrawItem, а после вызова строка обновляется так :
CompList.Items[Field].Selected := not CompList.Items[Field].Selected;
CompList.Items[Field].Selected := not CompList.Items[Field].Selected;

Далее переменной SetColor снова устанавливается false

В чем проблемма ?


ЮЮ   (2005-02-11 07:47:00) [4]

>По идее 0-я строка должна выделяться синим цветом

Чтобы 0-я строка выделилась синим цветом, именно в CompListCustomDrawItem должен быть код, который рисует 0-ую строку синим цветом, а у тебя там код, котрый никогда не выполняется (т.к. SetColor всегда false), а если и выполнялся бы, то там нет никакого рисования. Проведи над своим ListView другой формой и получи удовольствие :)


Progh   (2005-02-11 06:10:00) [5]

Вот написал слледующее :

var
 _Color: Integer;
 SetColor: Boolean;

procedure TMain.CompListCustomDrawItem(Sender: TCustomListView;
 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 if not SetColor then
   Exit;
   Sender.Canvas.Brush.Color := _Color;
end;

   //Установка цвета строки
procedure TMain.SetFieldColor(Field: Integer; __Color: Integer; _CompList: TbsSkinListView);
var
 State: TCustomDrawState;
 b: Boolean;
begin
 SetColor := true;
 _Color := __Color;
 b := false;
 CompListCustomDrawItem(CompList.Items.Owner,CompList.Items.Item[Field],State,b);
 CompList.Items[Field].Selected := not CompList.Items[Field].Selected;
 CompList.Items[Field].Selected := not CompList.Items[Field].Selected;
 SetColor := false;
end;

Begin
 SetFieldColor(0,clBlue,CompList);
end;

По идее 0-я строка должна выделяться синим цветом, но этого не происходит, почему ?


Antonn   (2005-02-09 16:12:00) [6]

Progh   (09.02.05 14:52) [2]
если строка одна, то ее номер можно хранить в tag. при -1 отрисовки не будет. При нажатии на кнопку, меняем tag и перерисовываем ListView.


Progh   (2005-02-09 14:52:00) [7]


>  [1] Александр Иванов ©   (09.02.05 14:48)


Ну я же написал, что знаю как менять цвет именно в этом свойстве, а как изменить цвет строки 0 скажем при нажатии на кнопку ?


Александр Иванов   (2005-02-09 14:48:00) [8]

onDrawItem


Наверх

Титульная страница Поиск, карта сайта Написать письмо