Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CheckListBox и перерисовка [D6, Win95/98, WinXP]


prorok2 ©   (2004-09-09 12:10:00) 

День добрый.
Проблема вот в чем. Сформировал список в CheckListBox. Сделал в CheckListBox через одну цветные строки и если элемент выделен, то он жирным шрифтом отображается. Все это прекрасно работает.
Но когда текст не влезает в окошко и пытаюсь прокручивать с помощью горизонтальной полосы прокрутки текст в CheckListBox, то появляются какие-то серые вертикальные линии, число которых зависит от скорости прокрутки.
И между строками есть такие же серые линии. Однако если элемент списка выделен, то вокруг него это серое обрамление пропадает.
Как с этим бороться?


prorok2   (2004-09-10 11:37:00) [1]

Но сразу же еще вопрос созрел. Как убрать обрамление серой рамочкой на текущем элементе, который выделен?


prorok2   (2004-09-10 11:35:00) [2]

BillyJeans   (10.09.04 09:54) [5]
Спасибо! Убрал DrawFocusRect(Rect); и все нормально заработало. Честно говоря, процедуру раскраски строк я писал исходя из процедуры раскраски строк в ListBox (там все без проблем работает).


TUser   (2004-09-10 10:06:00) [3]

Я думаю, что лучше было бы покарасить все нужным цветом, а потом вызвать inherited.


TUser   (2004-09-10 10:06:00) [4]

PS. Т.е. переписать сам код прорисовки элемента.


BillyJeans   (2004-09-10 09:54:00) [5]

а зачем DrawFocusRect(Rect); ?


prorok2   (2004-09-10 09:12:00) [6]

Вот код, раскрашивающий строки.

procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
 Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TCheckListBox).Canvas do
  begin
     Brush.Color:=clWhite;
     if State=[odSelected] then
     begin
        Font.Style := [fsBold];
        Font.Color := clWindowText;
     end;
     if State=[odSelected, odFocused] then
     begin
        Font.Style := [fsBold];
        Font.Color := clWindowText;
     end;

     if (index mod 2 <> 0) then
        (Control as TCheckListBox).Canvas.brush.color := clRed;

     FillRect(Rect);
     TextOut(Rect.Left, Rect.Top, (Control as TCheckListBox).Items[Index]);
     DrawFocusRect(Rect);
  end;
end;


wicked   (2004-09-09 19:57:00) [7]

[1] и [2] правы...
но все таки, глядя на

> Сделал в CheckListBox через одну цветные строки и если элемент
> выделен, то он жирным шрифтом отображается

посоветую - рисовать все строки, не зависимо от того, цветная она, или нет...


jack128   (2004-09-09 19:40:00) [8]

Ошибка в 17 строке (с)


Mim1   (2004-09-09 19:20:00) [9]


> Сделал в CheckListBox через одну цветные строки


Неудивительно что никто не ответил. Пишите понятнее.
ЗЫ Сразу приведите код раскраски элементов.


Наверх

Титульная страница Поиск, карта сайта Написать письмо