![]() |
|
|
|
|
#1
|
|||
|
|||
|
Можно ли в ListBox'е один Item сделать жирным (шрифт), а другой обычным и т.д.?
|
|
#2
|
||||
|
||||
|
Это пример изменения цветов строк
Код:
procedure TTest.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TListBox).Canvas do
begin
case Index of
0:
begin
Font.Color := clBlue;
Brush.Color := clYellow;
end;
1:
begin
Font.Color := clRed;
Brush.Color := clLime;
end;
2:
begin
Font.Color := clGreen;
Brush.Color := clFuchsia;
end;
end;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;Можно менять и стиль шрифта, используя Font.Style: Код:
procedure TTest.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TListBox).Canvas do
begin
case Index of
0:
begin
Font.Style := fsBold;
Brush.Color := clYellow;
end;
1:
begin
Font.Style := fsItalic;
Brush.Color := clLime;
end;
2:
begin
Font.Style := fsUnderline;
Brush.Color := clFuchsia;
end;
end;
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;Последний раз редактировалось 4kusNick, 22.03.2007 в 15:56. |
|
#3
|
|||
|
|||
|
Возникли 2 вопроса:
1. Когда происходит событие OnDrawItem? 2. Говорит Imcompatible types TFontStyle и TFontStyles! Как так? |
|
#4
|
||||
|
||||
|
1. Событие происходит при отрисовке элемента (On Draw Item - При Отрисовке Элемента) =) Для того, чтобы событие срабатывало, поставь у лист бокса св-во Style = lbOwnerDrawFixed, lbOwnerDrawVariable, или lbVirtualOwnerDraw. Событие OnDrawItem срабатывает только в OwnerDraw лист боксах. Кстати, это все написано в хэлпе, так что советую подучить английский, чтобы сэкономить себе в дальнейшем кучу времени.
2. Да, сорри, писал по памяти, забыл [] поставить. Короче вместо Font.Style := fsUnderline; пиши Font.Style := [fsUnderline]; Эта ошибка возникает, т.к. Font.Style - это множество типа TFontStyles, в ктором находятся элементы типа TFontStyle. А для работы с множествами принято использовать []. Например можно указать сразу несколько стилей Font.Style := [fsUnderline,fsItalic], а можно ни одного Font.Style := []; Так же можно использовать + и - при работе с множествами. Например, стили шрифта такие: [fsUnderline,fsItalic,fsBold], а мы хотим оставить только [fsUnderline,fsItalic]; В таком случае необходимо написать так: Font.Style := Font.Style - [fsBold]; Ну и т.д. Вобщем хэлп тебе в руки и вперед! Последний раз редактировалось 4kusNick, 23.03.2007 в 12:13. |
|
#5
|
|||
|
|||
|
Это всё понятно, но допустим я добывляю элементы в ListBox из ADOQuery:
Код:
Index:=StrToInt(Label3.Caption)-1;
if ADOQuery3.FieldByName('Punkt').AsInteger=1 then
begin
with (Control as TListBox).Canvas do
begin
Font.Style:=[fsBold];
FillRect(Rect);
TextOut(Rect.Left, Rect.Top, (Control as TListBox).Items[Index]);
end;
end;У меня получается, что в ListBox добавляются все элементы, а потом прорисовываются и вообще не-то что мне нужно отображается. Через другое событие можно это выполнять? |
|
#6
|
||||
|
||||
|
А можно ли сделать так что бы LISTVIEW автоматически сделал одну строку синим а другую зеленым и так до бесконечности??
|