Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизЗадать цвет фона строки i в ListView Найти похожие ветки
← →
Progh (2005-02-09 14:43) [0]Как задать цвет фона строки i в ListView. В интернете нашел, только как задать цвет фона в обработчике ListViewCustomDrawItem. А как задать его скажем при нажатии на кнопку ?
← →
Александр Иванов © (2005-02-09 14:48) [1]onDrawItem
← →
Progh (2005-02-09 14:52) [2]
> [1] Александр Иванов © (09.02.05 14:48)
Ну я же написал, что знаю как менять цвет именно в этом свойстве, а как изменить цвет строки 0 скажем при нажатии на кнопку ?
← →
Antonn © (2005-02-09 16:12) [3]Progh (09.02.05 14:52) [2]
если строка одна, то ее номер можно хранить в tag. при -1 отрисовки не будет. При нажатии на кнопку, меняем tag и перерисовываем ListView.
← →
Progh (2005-02-11 06:10) [4]Вот написал слледующее :
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-я строка должна выделяться синим цветом, но этого не происходит, почему ?
← →
ЮЮ © (2005-02-11 07:47) [5]>По идее 0-я строка должна выделяться синим цветом
Чтобы 0-я строка выделилась синим цветом, именно в CompListCustomDrawItem должен быть код, который рисует 0-ую строку синим цветом, а у тебя там код, котрый никогда не выполняется (т.к. SetColor всегда false), а если и выполнялся бы, то там нет никакого рисования. Проведи над своим ListView другой формой и получи удовольствие :)
← →
Progh (2005-02-11 08:05) [6]
> [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 08:14) [7]ты читать умеешь или как? именно в 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;
← →
Kray © (2005-02-11 10:00) [8]Вариант:
множество в котором хранить строки цвет которых должен быть иным.
соотв. при отрисовке проверять наличие в этом множестве номера строки.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c