Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.06 c
15-1141934121
JUS
2006-03-09 22:55
2006.04.02
Как скачать из компьютера на сотовый файлы с помощью BlueTooth?


2-1142764393
KLAUS
2006-03-19 13:33
2006.04.02
Криптование!


4-1137257217
Guest386x
2006-01-14 19:46
2006.04.02
Чтение видеобуфера


8-1130085255
fghfg
2005-10-23 20:34
2006.04.02
проблемы с добавлением звука в AVI


2-1142393448
Alex Korukin
2006-03-15 06:30
2006.04.02
Помогите найти ошибку в тексте программы