22.11.2007, 00:35
общий
это ответ
Здравствуйте, Simakov Leonid V!
Поскольку нет оценок предыдущим ответам, то предлагаю свой вариант на основе стандартного TListBox:
Устанавиливаем свойство ListBox1.Style:=lbOwnerDrawFixed
В обработчике ListBox1.OnDrawItem рисуем чего хотим :)
(Control as TListBox).Canvas - соотв. канва ListBox‘а
Index - соотв. индекс рисуемого элемента
Rect - координаты элемента относительно
State - состояние элемента (см. TOwnerDrawState)
Получится что-то на подобии приложения (надо подгонять под свои размеры и цвета)...
Приложение:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);begin if (Index<0) or (Index>ListBox1.Items.Count) then begin ListBox1.Canvas.Brush.Color:=clMoneyGreen; ListBox1.Canvas.FillRect(Rect); exit; end; if odFocused in State then begin ListBox1.Canvas.Brush.Color:=clMoneyGreen; ListBox1.Canvas.Font.Color:=clBlack; ListBox1.Canvas.FillRect(Classes.Rect(Rect.Left, Rect.Top, Rect.Left+20, Rect.Bottom)); inc(Rect.Left, 20); ListBox1.Canvas.Brush.Color:=clNavy; ListBox1.Canvas.Font.Color:=clWhite; ListBox1.Canvas.FillRect(Rect); end else begin ListBox1.Canvas.Brush.Color:=clMoneyGreen; ListBox1.Canvas.Font.Color:=clBlack; ListBox1.Canvas.FillRect(Rect); inc(Rect.Left, 20); end; ImageList1.Draw(ListBox1.Canvas, Rect.Left-19, Rect.Top+2, Index); ListBox1.Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+2,ListBox1.Items[Index]);end;