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

Вниз

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

Наверх





Память: 0.46 MB
Время: 0.032 c
4-1092652546
MetalFan
2004-08-16 14:35
2004.09.26
серийный номер CD/FD


14-1094374411
McSimm
2004-09-05 12:53
2004.09.26
Прошу понять меня правильно. Очень прошу.


1-1094995519
Marina
2004-09-12 17:25
2004.09.26
наследование от стандартного класса


3-1093584135
Dual
2004-08-27 09:22
2004.09.26
Проблема с базами или что же выбрать?


14-1094542966
TUser
2004-09-07 11:42
2004.09.26
Крутые крякеры?





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