Настроить цвета элемента TAdvSmoothListBox - PullRequest
1 голос
/ 12 августа 2011

Я только что установил компоненты TMS для Delphi и в TAdvSmoothListBox Я хотел бы настроить цвета для каждого элемента.

Я на самом деле использую .ItemAppearance.Fill.Color, но он заполняет все элементы одним цветом.

Может кто-нибудь подсказать, как настроить цвета для каждого элемента отдельно?

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Событие OnItemBkgDraw - это определенно то, что вам нужно, чтобы нарисовать фон самостоятельно.

Но если бы мне пришлось это сделать, фон никогда бы не выглядел очень хорошо. Так что я бы позволил кому-то другому сделать рисунок. К счастью, мы можем использовать метод Fill.Fill, который создаст хороший фон, совместимый с текущим внешним видом элемента и общим внешним видом компонента.

Это ваш OnItemBkgDraw обработчик:

uses AdvGDIP;

procedure TForm1.AdvSmoothListBox1ItemBkgDraw(Sender: TObject; Canvas: TCanvas; itemindex: Integer; itemRect: TRect;
  var defaultdraw: Boolean);
var
  g: TGPGraphics;
  ItemAppearance: TAdvSmoothListBoxItemAppearance;
  ir: TGPRectF;
begin
 // Disable default background drawing behavior
 DefaultDraw:= False;

 // Create our own item appearance which will be responsible for drawing the background
 // Note: The class needs an TAdvSmoothListBox owner, but we can't use ourselves as we would trigger an
 //   infinite update cycle - use a dummy list instead (can be created dynamically or
 //   just put it on your form being invisible)
 ItemAppearance:= TAdvSmoothListBoxItemAppearance.Create(DummyOwner);
 try
   // Get the current item appearance which we want to adjust a little
   ItemAppearance.Assign(AdvSmoothListBox1.ItemAppearance);

   // Set nice colors for current item (you can use the itemindex parameter to see which item is currently being painted)
   ItemAppearance.Fill.Color:= Random(High(TColor));
   ItemAppearance.Fill.ColorTo:= Random(High(TColor));

   // Now prepare the classes needed for drawing
   g := TGPGraphics.Create(Canvas.Handle);
   ir := MakeRect(itemrect.Left, itemrect.Top, itemrect.Right - itemrect.Left, itemrect.Bottom - itemrect.Top);
   try
     // And here it paints
     ItemAppearance.Fill.Fill(g, ir);
   finally
     g.Free;
   end;
 finally
   ItemAppearance.Free;
 end;
 // Done
end;
1 голос
/ 12 августа 2011

Я думаю, что Daemon_x прямо здесь, я не думаю, что вы можете сделать это с помощью свойств / методов TAdvSmoothlistbox по умолчанию.

Вы можете легко изменить шрифты, изображения и т. Д., Но цвет фона должен быть выполнен с использованием событий OnItemBkgDraw и / или OnItemDraw.

(как в версии 2.4.0.1)

...