Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
4-13845
ZEE
2002-05-25 01:37
2002.08.05
Мышиное колесо


7-13841
Krok
2002-05-16 12:29
2002.08.05
---|Ветка была без названия|---


1-13613
MARcoDEN
2002-07-23 21:28
2002.08.05
Combining signed and unsigned types


4-13866
Леонид
2002-05-02 20:44
2002.08.05
перехват сообщения WM_SPOOLERSTATUS


1-13624
Толстый
2002-07-25 10:55
2002.08.05
Выход из Windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский