Консультация № 163204
25.03.2009, 06:02
0.00 руб.
0 2 1
Здравствуйте уважаемые эксперты.

В написании программы использую компонент BusinessSkinForm VCL.

Имеется компонент TbsSkinListBox. Наследует большую часть функций и свойств оригинала (TListBox) + дополнительные.

Имеется список (храниться как массив, но не суть важно, вывести не проблема) который выводиться в контрол в порядке сначало On, потом Off (параметр в двумерном массиве). Строки On должны быть зеленым шрифтом, а Off соотвественно красным. Так же с лево от надписи (в строке) рисуется картинка методом .Items.AddObject(name + ^I + IntToStr(lvl), Logo);.
Где Logo переменная TBitMap. Name переменная String.

Перерыл много литературы (электронной) не смог найти как сделать, чтоб строки были разными цветами. Везде предлагается использовать .Canvas.Font.Color := clGreen;, но это не подходит, т.к. при добавление нового элемента перерисовывается весь контрол, и у всех строк становиться зеленый цвет.

Помогите пожалуйста найти решение, или подскажите каким дополнительным контролом (дополнением) можно решить данную проблему.

Заранее благодарю за ответы.

Обсуждение

Неизвестный
25.03.2009, 08:13
общий
это ответ
Здравствуйте, Сарумян!
Ниже пример обработчика для ListBox (свойство Style - lbOwnerDrawVariable)
Каждая нечетная строка рисуется красным, каждая четная -зеленым

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with ListBox1 do
begin
if Index and 1 = 0 then
begin
Canvas.Brush.Color := clWindow;
Canvas.FillRect(Rect);
Canvas.Font.Color := clGreen;
Canvas.TextOut(Rect.Left, Rect.Top, Items.Strings[index]);
end else begin
Canvas.Brush.Color := clWindow;
Canvas.FillRect(Rect);
Canvas.Font.Color := clRed;
Canvas.TextOut(Rect.Left, Rect.Top, Items.Strings[index]);
end; // if
end;
end;
Неизвестный
26.03.2009, 08:54
общий
Еще раз здравствуйте.

Как оказалось проблема в VLC компоненте который я использовал (BusinessSkinForm).
Пусть там и наследуются компоненты, но все же работает чуть по другому.

Эффект от раскраски строк (да и от добавления картинок с лево) такой:

- имеем 6 строк (111,222,333,444,555,666)
Отображается текст только в 1 строке, и то текст той строки которая выделена. Все остальные строки не имеют текста, просто пустые.
Если выделить первую строку, то текста даже там не будет.
На кринах понятнее...




З.Ы. Обращение к модераторам "Это не новый вопрос, это дополнение и уточнение проблемы".
Форма ответа