Текущий архив: 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