|
#1
|
|||
|
|||
ListBox
Можно ли в 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; THE CRACKER IS OUT THERE Последний раз редактировалось 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]; Ну и т.д. Вобщем хэлп тебе в руки и вперед! THE CRACKER IS OUT THERE Последний раз редактировалось 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 автоматически сделал одну строку синим а другую зеленым и так до бесконечности??
|
#7
|
||||
|
||||
"А можно ли сделать так что бы LISTVIEW автоматически сделал одну строку синим а другую зеленым и так до бесконечности??"
Да, проверяй четность в цикле и раскрашивай. Washington vbmenu_register("postmenu_5407", true); , Ты как-то странно добавляешь... Чет я не понимаю чего тебе именно нужно... THE CRACKER IS OUT THERE |