![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Задать цвет фона строки 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