Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.27;
Скачать: CL | DM;

Вниз

ListBox -> items -> font-> color   Найти похожие ветки 

 
XenonXX ©   (2003-10-12 02:13) [0]

Как можно сделать так, чтоб шрифт некоторых строчек в listbox был другого цвета? Помогите плз, очень надо.


 
Palladin ©   (2003-10-12 02:20) [1]

TListBox.OnDrawItem + F1

вверху есть надпись Example и на нее можно нажать


 
XenonXX ©   (2003-10-12 03:34) [2]

Спасибо. Но это сработает, если только при записывании менять, а мне надо не перерисовывая(как выделение для плейлиста как в винампе), или так нельзя?


 
romeo ©   (2003-10-12 05:46) [3]

Попробуй, коряво, но вроде работает...
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
Loop: Integer;
begin
for Loop := 0 to ListBox1.Items.Count - 1 do begin
if ListBox1.Selected[Loop] //или другое условие
then begin
ListBox1.Canvas.Brush.Color := ListBox1.Color;
ListBox1.Canvas.FillRect(ListBox1.ItemRect(Loop));
ListBox1.Canvas.Font.Style := ListBox1.Canvas.Font.Style + [fsBold];
ListBox1.Canvas.Font.Color := clBlue;
ListBox1.Canvas.TextOut(2, ListBox1.ItemRect(Loop).Top + 2, ListBox1.Items[Loop]);
end
else begin
ListBox1.Canvas.Brush.Color := ListBox1.Color;
ListBox1.Canvas.FillRect(ListBox1.ItemRect(Loop));
ListBox1.Canvas.Font.Style := ListBox1.Canvas.Font.Style - [fsBold];
ListBox1.Canvas.Font.Color := ListBox1.Font.Color;
ListBox1.Canvas.TextOut(2, ListBox1.ItemRect(Loop).Top + 2, ListBox1.Items[Loop]);
end;
end;
end;


P.S. При прямом использовании вместо цикла праметра "index", у меня почему-то не происходило обновления уже не выделенных строк,
а если свернуть-развернуть форму - перерисовывалось как надо. То ли в Делфи глюк, то ли мне уже надо спать...


 
XenonXX ©   (2003-10-13 08:15) [4]

Аригато, поразбираюсь...


 
KSergey ©   (2003-10-13 08:37) [5]

[2] XenonXX © (12.10.03 03:34)
Спасибо. Но это сработает, если только при записывании менять, а мне надо не перерисовывая(как выделение для плейлиста как в винампе), или так нельзя?


Что значит при записывании??
В виндах есть такой порядок: есть место в коде, где заполняем данные (или меняем их) и есть место, где это все отрисовывается.
Т.е. если необходимо что-то поменять (на экране), то сначала меняем соотв. данные (флажки в данном случае, а потом просто "просьм" элемент перерисоваться (что-то из серии Redraw, Invalidate и т.д., они по-разному работают, разберись).
Так вот об этом и речь: в OnDrawItem идет именно отрисовка (элемента). Т.е. надо просто поменять данные, на основе которых будем менять цвет, и послать команду на перерисовку - вот и все.
Ну а перво-наперво придумать, где же эти данные хранить ;)


 
XenonXX ©   (2003-10-13 08:39) [6]

У меня цвет меняет, но вот почему-то выделение(то, что мышкой для selected) не работает - не могу выбрать даже одного, не то что мульти... Не знаете как лечить?


 
KSergey ©   (2003-10-13 08:59) [7]

Выбрать или подсветить выбранное? Это разные вещи ;)
Советую обратить внимание на параметр State обработчика ListBox1DrawItem


 
XenonXX ©   (2003-10-14 06:48) [8]

Все, всем спасибо, привожу код, для всех кто сюда еще зайдет:
[code]
procedure TForm2.ListBox2DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
i: Integer;
t:boolean;
begin
if odSelected in State then//знаю, что бред, но без этого не работает:)
ListBox2.Brush.Color:=form2.ListBox2.Color else
form2.ListBox2.Canvas.Brush.Color := form2.ListBox2.Color;
if PlayingFileName=form2.ListBox1.Items.Strings[Index]// умова выделения
then begin
form2.ListBox2.Canvas.FillRect(Rect);
form2.ListBox2.Canvas.Font.Color := clRed;
form2.ListBox2.Canvas.TextOut(2, Rect.Top + 2, form2.ListBox2.Items[Index]);
end
else begin
form2.ListBox2.Canvas.FillRect(Rect);
if odSelected in State then form2.ListBox2.Canvas.Font.Color := clWhite
else
form2.ListBox2.Canvas.Font.Color := form2.ListBox2.Font.Color;
form2.ListBox2.Canvas.TextOut(2, Rect.Top + 2, form2.ListBox2.Items[Index]);
end;
end;[/code]



Страницы: 1 вся ветка

Текущий архив: 2003.10.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
1-89198
AB
2003-10-17 10:31
2003.10.27
IniFile -> ресурсы


7-89615
Opryshok
2003-07-16 19:53
2003.10.27
Горячие клавиши


14-89564
Knight
2003-10-07 23:08
2003.10.27
Ну вот прочитал...


1-89272
abb
2003-10-14 12:56
2003.10.27
Совет нужен по компоненте для отображения дерева и wisywig реда..


1-89254
P0tia
2003-10-14 17:32
2003.10.27
Variable DataModule1 might not have been initialized