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