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

Вниз

ListView   Найти похожие ветки 

 
dima123   (2007-09-08 01:14) [0]

Здравствуйте! Подскажите пожалуйста как в ListView выделить определенные строки например красным цветом. Спасибо


 
dima123   (2007-09-08 01:34) [1]

К модераторам: если этот вопрос не подходит для данного раздела, пожалуйста не удаляйте его, а переместите в нужный.


 
{RASkov} ©   (2007-09-08 11:53) [2]

> [1] dima123   (08.09.07 01:34)

Явно не сюда вопрос, но ладно...
на CustomDrawItem:
if определенная строка then Sender.Canvas.Brush.Color:=clRed;
Например:
if ODD(Item.Index) then Sender.Canvas.Brush.Color:=clRed;
"закраска" строк через одну красным цветом....


 
dima123   (2007-09-08 19:27) [3]

Слушай, а не мог бы ты мне подробнее обяснить, а то я не могу понять, что здесь и куда: что такое ODD, чей Sender, что "на CustomDrawItem" и т. д.
ПС если знаете как изменить цвет шрифта конкретной записи, напишите еще это. буду благодарен.


 
{RASkov} ©   (2007-09-08 22:54) [4]

> [3] dima123   (08.09.07 19:27)
> Слушай, а не мог бы ты мне подробнее обяснить

:о)
Не знаю почему не переносят твою ветку, но ладно отвечу еще раз :)

> что такое ODD

- это функция такая. Ты знаешь что такое функция/процедура? Она возврощает Boolean-значение True/False в зависимости от параметра четное/нечетное.

> чей Sender, что "на CustomDrawItem"

Ну дык чей(т.е. у кого он "сработал") CustomDrawItem? того и сендер - логично?

> как изменить цвет шрифта конкретной записи

Все точно так же:
if конкретная запись then Sender.Canvas.Font.Color:=clBlue;
А еще есть F1.

На вот, изучай:
Создай новый проект, и кинь на форму ListView1, создай два обработчика один форме-OnCreate
другой ListView1 - OnCustomDrawItem

Замени их на эти:

procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
 for N := 0 to 10 do ListView1.AddItem("Item № "+IntToStr(N), nil);
 for N := 0 to 2 do ListView1.Columns.Add.Caption:="Column "+IntToStr(N);
 ListView1.ViewStyle:=vsReport;
end;

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 //Если не четная то закрасить фон цветом
 if ODD(Item.Index) then Sender.Canvas.Brush.Color:=clInfoBk;
 //Если индекс "наш" то выделить шрифтом
 if Item.Index in [2,3,5,7] then
  with Sender.Canvas.Font do begin
   Color:=clRed;
   Style:=[fsBold];
  end
end;


 
{RASkov} ©   (2007-09-08 22:57) [5]

> Она возврощает Boolean-значение True/False в зависимости от параметра четное/нечетное.

Правильнее так:
Она возврощает Boolean-значение True/False в зависимости от параметра нечетное/четное.
Переведи с англ слово Odd


 
dima123   (2007-09-09 01:53) [6]

спасибо,
> - это функция такая. Ты знаешь что такое функция/процедура?
>  Она возврощает Boolean-значение True/False в зависимости
> от параметра четное/нечетное.
знаю, просто этой никогда не пользовался и вголову не пришло посмотреть в справку


 
DVM ©   (2007-09-09 22:32) [7]

Советую использовать OnDrawItem + OwnerDraw=true, а не OnCustomDrawItem + OwnerDraw = false, т.к. последнее неправильно работает под Vista почему-то (почему не разбирался особо).


 
dima123   (2007-09-09 22:44) [8]

на последок скажи как избавиться от этих остаточных явлений: иногда бывает, когда просто нужно заполнить листвью некоторые записи закрашиваются.


 
DVM ©   (2007-09-09 22:48) [9]


> когда просто нужно заполнить листвью некоторые записи закрашиваются.

Это как? Хорошо бы картинку и код рисования.


 
dima123   (2007-09-10 00:04) [10]

вроде как уже сам решил. а вот еще такой вопрос: как менять цвет записи по ее индексу, не могу избавиться от привязки к Sender: TCustomListView и вообще от CustomDrawItem


 
dima123   (2007-09-10 20:58) [11]

подскажите кто-нибудь, очень нужно


 
{RASkov} ©   (2007-09-10 21:04) [12]

> [11] dima123   (10.09.07 20:58)

А ты попробуй спросить, может и помогут, а [10] - это не вопрос.... так ....твои мысли вслух.


 
dima123   (2007-09-11 17:18) [13]

хорошо, приведите пример метода, который принимает в качестве параметра целочисленное значение, и меняет цвет строки с этим порядковым номером, тоесть метод работающий в любое время, а не по событию.


 
DVM ©   (2007-09-11 17:24) [14]


> тоесть метод работающий в любое время, а не по событию.

Так неправильно. Т.к. ListView может перерисовываться в любое время, то он сам должен знать какую строку каким цветом рисовать, поэтому эту информацию следует хранить в самом ListView, например, в свойствах Data его итемов. Вот твой метод и должен эту информацию менять, а потом, например ListView.Invalidate() вызвать для перерисовки.


 
{RASkov} ©   (2007-09-11 17:25) [15]

> [13] dima123   (11.09.07 17:18)

Нет такого.... все реализуется в ручную программистом....
Ты не хочешь нормально вопрос задать? Так и будешь вокруг да около? Ну это твои проблемы....


 
dima123   (2007-09-11 20:42) [16]

Я понимаю, для чего существуют события и когда они срабатывают. Меня интересует такой вопрос: допустим в листвью уже есть записи и есть кнопка на форме, при нажатии на которую выделяется цветом например запись № 3. вот меня интересует как это сделать


 
новичёк   (2007-09-11 20:48) [17]

буквально в соседней ветке ответ:
http://delphimaster.net/view/2-1189508158/
там даже код есть


 
{RASkov} ©   (2007-09-11 20:58) [18]

> [16] dima123   (11.09.07 20:42)
> при нажатии на которую выделяется цветом например запись
> № 3. вот меня интересует как это сделать

Просто.
На нажатие кнопки присвоить некой переменной некое значение и вызвать листвью.Invalidate.
Тебе ответили уже на этот вопрос в [14].
Ну а как покрасить ты уже знаешь.... смотри начало ветки.


 
dima123   (2007-09-11 21:52) [19]

ясно. спасибо



Страницы: 1 вся ветка

Текущий архив: 2007.10.07;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
2-1189453972
aids
2007-09-10 23:52
2007.10.07
TSitringList


2-1189326951
Jimmy
2007-09-09 12:35
2007.10.07
Refresh собственного компонента при изменении свойства


1-1185116122
Al_delta
2007-07-22 18:55
2007.10.07
TreeView: неправильно создаются дочерние узлы. Помогите!


2-1189425493
Romm
2007-09-10 15:58
2007.10.07
Имя файла


15-1189263351
Анатолий К.
2007-09-08 18:55
2007.10.07
Информация о билде в Delphi.