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

Вниз

CheckListBox и перерисовка   Найти похожие ветки 

 
prorok2   (2004-09-09 12:10) [0]

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


 
Mim1 ©   (2004-09-09 19:20) [1]


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


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


 
jack128 ©   (2004-09-09 19:40) [2]

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


 
wicked ©   (2004-09-09 19:57) [3]

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

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

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


 
prorok2   (2004-09-10 09:12) [4]

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

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;


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

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


 
TUser ©   (2004-09-10 10:06) [6]

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


 
TUser ©   (2004-09-10 10:06) [7]

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


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

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


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

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



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

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

Наверх




Память: 0.48 MB
Время: 0.032 c
11-1080481100
zoom
2004-03-28 17:38
2004.09.26
Как сохранить из editbox в файл через диалог


14-1094743978
X9
2004-09-09 19:32
2004.09.26
Организация локальной сети


1-1094657252
maksim
2004-09-08 19:27
2004.09.26
Распечатка отчетов


4-1091445353
the_ram
2004-08-02 15:15
2004.09.26
Tray


6-1090215788
DimD
2004-07-19 09:43
2004.09.26
IdPOP3 и Proxy