![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 через одну цветные строки
Неудивительно что никто не ответил. Пишите понятнее.
ЗЫ Сразу приведите код раскраски элементов.