Главная страница
    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.46 MB
Время: 0.005 c
14-13788
Galinka
2002-07-09 12:51
2002.08.05
Где можно почитать про БД в Delphi, интересуют клиент-серверные


3-13551
Itspets
2002-07-14 01:11
2002.08.05
Сбор данных из множества баз MS Access


3-13528
Cubus
2002-07-15 10:13
2002.08.05
mdb 2 db


6-13759
Ajax
2002-05-11 22:02
2002.08.05
Определение траффика через модемное соединение.


14-13811
Shtukatur
2002-07-11 17:12
2002.08.05
Как работать с начальством





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский