![]() |
|
#1
|
|||
|
|||
![]() Привет. Такая проблема: в ListBox добавляются сообщения анализатора, но когда сообщения не помещаются в клиентскую область бокса, то видны только первые сообщения. Как сделать, чтобы листбокс проматывался до последнего сообщения? И еще, как рисовать разные элементы листбокса разным цветом?
|
#2
|
||||
|
||||
![]() Цитата:
Код:
ListBox1.TopIndex:=ListBox1.Items.Count-1; Цитата:
Код:
property OnDrawItem: TDrawItemEvent; TDrawItemEVent = procedure(ListBox: TListBox; Index: Integer; Rect: TRect; State: TOwnerDrawState) of object; Понять, что хочет заказчик - бесценно, ведь он платит MasterCard ![]() |
Этот пользователь сказал Спасибо cotseec за это полезное сообщение: | ||
Arvo (05.08.2012)
|
#3
|
||||
|
||||
![]() Пример из DRKB. Необходимо изменить свойство Style в TListBox на lbOwnerDrawFixed, иначе событие OnDrawItem никогда не произойдёт. Обработчик события OnDrawItem TListBox:
Код:
procedure TForm1.ListBox1DrawItem (Control: TWinControl; Index: Integer;Rect: TRect; State: TOwnerDrawState); var myColor: TColor; myBrush: TBrush; begin myBrush := TBrush.Create; with (Control as TListBox).Canvas do begin if not Odd(Index) then myColor := clSilver else myColor := clYellow; myBrush.Style := bsSolid; myBrush.Color := myColor; Windows.FillRect(handle, Rect, myBrush.Handle); Brush.Style := bsClear; TextOut(Rect.Left, Rect.Top,(Control as TListBox).Items[Index]); MyBrush.Free; end; end; или: Код:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin With ListBox1 do begin If odSelected in State then Canvas.Brush.Color:=clTeal { твой цвет } else Canvas.Brush.Color:=clWindow; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left+2,Rect.Top,Items[Index]); end; end; С ListBox1.ItemIndex:= ListBox1.Count - 1 полностью согласен. |
#4
|
|||
|
|||
![]() Цитата:
|
#5
|
|||
|
|||
![]() А все разобрался, это у меня в коде косяки были
![]() |