Главная страница
    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.033 c
1-1094636929
hgd
2004-09-08 13:48
2004.09.26
Подскажите алгоритм или ...... ?


3-1093867645
Yrtimd
2004-08-30 16:07
2004.09.26
Что такое FireBird?


1-1095085977
Multy
2004-09-13 18:32
2004.09.26
Напомните как создаётся процедура перехватывающая все сообщения


14-1094505281
Jus
2004-09-07 01:14
2004.09.26
Nt технологии


9-1086199501
Кто-то
2004-06-02 22:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский