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

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

ListView [D6]


dima123 ©   (2007-09-08 01:14:00) 

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


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

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


{RASkov}   (2007-09-11 20:58:00) [2]

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

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


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

буквально в соседней ветке ответ:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1189508158&n=18
там даже код есть


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

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


{RASkov}   (2007-09-11 17:25:00) [5]

> [13] dima123   (11.09.07 17:18)

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


DVM   (2007-09-11 17:24:00) [6]


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

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


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

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


{RASkov}   (2007-09-10 21:04:00) [8]

> [11] dima123   (10.09.07 20:58)

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


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

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


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

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


DVM   (2007-09-09 22:48:00) [11]


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

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


dima123   (2007-09-09 22:44:00) [12]

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


DVM   (2007-09-09 22:32:00) [13]

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


dima123   (2007-09-09 01:53:00) [14]

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


{RASkov}   (2007-09-08 22:57:00) [15]

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

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


{RASkov}   (2007-09-08 22:54:00) [16]

> [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;


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

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


{RASkov}   (2007-09-08 11:53:00) [18]

> [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 01:34:00) [19]

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


Наверх

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