Вопрос № 163204: Здравствуйте уважаемые эксперты. В написании программы использую компонент BusinessSkinForm VCL. Имеется компонент TbsSkinListBox. Наследует большую часть функций и свойств оригинала (TListBox) + дополнительные. Имеется список (х...
Вопрос № 163.204
Здравствуйте уважаемые эксперты.
В написании программы использую компонент 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, 06:02
Вопрос задал: Сарумян (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Armad
Здравствуйте, Сарумян! Ниже пример обработчика для 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;
Ответ отправил: Armad (статус: 3-й класс)
Ответ отправлен: 25.03.2009, 08:13
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 246022 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5 Комментарий оценки: Все же 5, не же ли 4. Т.к. тут присутствует и моя невнимательность. Данный метод уже находил :) Работает хорошо. Но как оказалась беда в VLC который я использовал (скины).
З.Ы. В мини-форуме...
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.