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

Вниз

Как поступить?   Найти похожие ветки 

 
BlackGrin ©   (2002-07-19 14:15) [0]

Подскажите как организовать чтото на подобе следующего: checklistbox в котором реально было из процедуры выделять записи разными цветами. И чтобы при нажатие на определеную запись она подсвечивалась определенным цветом + то что уже подсвечено не сбрасывалось. Есть ли какиенить компоненты чтобы решить такую проблему? Или как это решить с помошью cheklistbox?
Заранее спасибо!


 
Song ©   (2002-07-19 14:30) [1]

В ручную на событии TCheckListBox.onDrawItem


 
BlackGrin ©   (2002-07-19 15:09) [2]

Это понятноно какой параментр отвечает за цвет подсветки?


 
Song ©   (2002-07-19 15:12) [3]

Ok, тогда нужно понятно, что Вы имеете ввиду под словом "подсветка". Это выделение итема (фиолетовый цвет) ?


 
Skier ©   (2002-07-19 15:32) [4]

>BlackGrin

cheklistbox.Style := ldOwnerDrawFixed;

или

cheklistbox.Style := ldOwnerDrawVariable;

В TCheckListBox.onDrawItem пишешь примерно так :


procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
if (odSelected in State) then
TCheckListBox(Control).Canvas.Brush.Color := clNavy
else begin
if Index = 0 then
TCheckListBox(Control).Canvas.Brush.Color := clGreen
else
TCheckListBox(Control).Canvas.Brush.Color := clYellow;
end; //else
TCheckListBox(Control).Canvas.FillRect(Rect);
TCheckListBox(Control).Canvas.TextOut(Rect.Left, Rect.Top,
TCheckListBox(Control).Items[Index]);
end;


 
Song ©   (2002-07-19 15:51) [5]

2Skier © (19.07.02 15:32)
Желательно не использовать прямые цвета, а использовать предопределённые константы (ClCaptionText,ClWindowText,ClHihgliht и т.д.)
Ваш отрывок был бы намного красивей, если бы Вы использовали With:

procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
With TCheckListBox(Control),TCheckListBox(Control).Canvas Do
Begin
IF (odSelected in State) then Brush.Color:=clNavy else
IF Index=0 then Brush.Color:=clGreen else Brush.Color:= ClYellow;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,Items[Index]);
End;
end;

И, в третьих, никогда не пишите готового варианта, пусть сначала человек попробует сам дойти, попробует сделать сам, а далее если у него не получится, Вы всегда ему успеете написать. Так намного полезней. С готовым вариантом программист программиста из себя не сделает.


 
Skier ©   (2002-07-19 15:57) [6]

>Song
Твой код не будет работать !


 
Song ©   (2002-07-19 16:07) [7]

То что нужно вынести проверку компонента odSelected в множестве State за пределы With это частность. Я просто хотел Вам показать как опимизировать код для улучшения удобочитаемости.


 
BlackGrin ©   (2002-07-21 23:00) [8]

ребят спасибо! помогли! но есть еще один вопрос. Всё конечно хорошо но как просто из левой процедуры назначит определеному itom`у подсветку другого света? Просто Рефрешить каждые 2 секунды весь листбокс не очень... и если скролинг будет то он будет при рефреше сбиваться...


 
Song ©   (2002-07-22 09:35) [9]

Присвоить-то можно (TCanvas.Brush.Color), но сохраняться оно не будет, не зря же был пример с TCheckListBox.onDrawItem


 
BlackGrin ©   (2002-07-23 00:41) [10]

в смысле сохраняться не будет?
Мне интересно как просто из процедуры изменить допустим 4 строку на зеленый цвет


 
Song ©   (2002-07-23 10:02) [11]

Изменить можно, но при следующей перерисовке он сбросится (Ваш цвет). Поэтому в вышеприведённой процедуре сделайте что-нить
With TCheckListBox(Control) Do
...

IF Index=Tag then Canvas.Brush.Color:=clGreen

....

А в тексте программы для поля Tag задавайте тот номер строки, которых хотите окрасить и будет перекрашен (возможно придётся перерисовать контрол после смены Tag для немедленной перерисовки.
А на onCreate формы поставьте Tag:=-1



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

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

Наверх




Память: 0.49 MB
Время: 0.008 c
1-13658
ValeX
2002-07-23 14:39
2002.08.05
CharToOem bug


3-13554
MCFire
2002-07-15 10:39
2002.08.05
Как при инсталяции моей проги проинсталировать IB server???


1-13688
Man-In-Red
2002-07-23 20:22
2002.08.05
Помогите пожалуйста!


1-13710
Toma2
2002-07-20 14:27
2002.08.05
Округление


3-13562
Radimir
2002-07-16 09:19
2002.08.05
не работает Insert