Текущий архив: 2006.04.02;
Скачать: CL | DM;
ВнизCanvas && ListBox Найти похожие ветки
← →
markers © (2006-03-01 02:10) [0]Здраствуйте!
Предомною встыла задача, "выделить", некоторые элементы ListBox, но не просто выделить, а как бы дописать некоторый текст другим цветом и шрифтом. Как мне это реальзовать?
Если использовать TextRect, то предыдущий текст стираеться.....
Заранее спасибо!
← →
Германн © (2006-03-01 02:30) [1]
> а как бы дописать некоторый текст другим цветом и шрифтом.
Давай попробуем без "как бы". Сформулируй вопрос точнее.
До встречи в "Начинающим".
← →
Джо © (2006-03-01 02:50) [2]> markers © (01.03.06 02:10)
УстановитьStyle := lbOwnerDrawFixed
. В обработчике OnDrawItem самому занимать отрисовкой элементов. Схема простая:
// Обработчик OnDrawItem
// Вызывается каждый раз, когда необходимо отрисовать очередной item
// в Index - номер строки Листбокса
// в Rect - область, занимаемая конкретной строкой в пределах ListBox"а
procedure TMainFrm.ListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: Windows.TRect; State: TOwnerDrawState);
var
begin
with TListBox(Control).Canvas do
begin
// устанавливаем цвет заднего фона
// и цвет текста строки
if odSelected in State then
begin
Brush.Style := bsSolid;
Brush.Color := clHighlight;
Font.Color := clHighlightText;
end
else
begin
Brush.Style := bsSolid;
Brush.Color := clWindow;
Font.Color := clWindowText;
end;
// выполняем заливку
FillRect (Rect);
// ну, а тут пишем, что нужно,
// например, просто выводим исходную строку
TextOut (Rect.Left, Rect.Top, ListBox1.Items[Index]);
......
← →
Джо © (2006-03-01 02:51) [3]Немного подкорректируй пример, писал половину в редакторе, половину здесь, есть мелкие очевидные огрехи...
← →
markers © (2006-03-01 10:16) [4]Так немного разобрался.
Ну всё в обшем этот вопрос решён, так:with (Control as TListBox).Canvas do
begin
if odd(Index-1) then Brush.Color:=$FFFFFF
else Brush.Color:=$F5F5F5;
if (odSelected in State) or (odFocused in State) or (odComboBoxEdit in State) Then
begin
Brush.Color:=clNavy;
Brush.Style:=bsSolid;
Font.Color:=clWhite;
end
else Font.Color:=(Control as TListBox).Font.Color;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+1,CategoryList.Items.Strings[index]);
if Index = 5 Then
begin
TextRect(Rect,Rect.Left+2,Rect.Top+1,CategoryList.Items.Strings[index]);
Font.Color:=clRed;
TextOut (Rect.Left+TextWidth(CategoryList.Items.Strings[index])+5, Rect.Top+2, "Новинка!");
end
else
end;
Теперь есть другой вопрос, как сделать горизантальную прокрутку в ListBox? Где-то видел, но не помню.
Я всегда выводил текст TextRect, Плохо это или хорошо? Хотя впинцепи сейчас понял, что это плохо если Итем длинный.
("Нет, к сожалению я неправильно объяснил. Поясняю.
Есть Items в ListBox (Они кстати тоже OwerDraw используют), которые допустим имеют чёрный цвет. А мне нужно надписать допустим слово новинка красным цеветом.")
← →
markers © (2006-03-01 10:24) [5]Вот нашёл.
SendMessage(CategoryList.Handle, LB_SETHORIZONTALEXTENT, 400, Longint(0));
Это сообщение обязатиельно при создании формы писать?
А то я хотел бы находить размер самого длинного Item`а и вставлять эту полученную цифру.
← →
Джо © (2006-03-01 11:43) [6]> А мне нужно надписать допустим слово новинка красным цеветом.")
Font.Color := clRed;
← →
Amoeba © (2006-03-01 12:09) [7]
> markers © (01.03.06 10:24) [5]
> А то я хотел бы находить размер самого длинного Item`а и
> вставлять эту полученную цифру.
Как это делается, подробно и с полным кодом описано у Тейксейры и Пачеко.
← →
markers © (2006-03-01 15:51) [8]Всем спасибо! Сам справился :)
Страницы: 1 вся ветка
Текущий архив: 2006.04.02;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.039 c