Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Задать цвет фона строки 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
1-1108463354
Толян
2005-02-15 13:29
2005.02.27
Клавиши


4-1105004637
sergeii
2005-01-06 12:43
2005.02.27
Com Port


9-1101385039
Xenon
2004-11-25 15:17
2005.02.27
Насчет выстрелов


1-1107976450
Mensss
2005-02-09 22:14
2005.02.27
Проблемка с TstringList


3-1106807299
Behemoth
2005-01-27 09:28
2005.02.27
Ошибка при удалении задания в MSSQL