Консультация № 64011
24.11.2006, 14:06
0.00 руб.
0 2 2
Здравствуйте, дорогие эксперты. Я прорисовываю ячейки TCheckListBox (свойство OwnerDraw=true) таким образом, чтобы три ячейки прорисовывались серым цветом, следующие три - белым, и т.д. (см. приложение). В принципе, работает, но при перемещении по боксу вокруг белых ячеек остается темная рамка. Как от нее избавиться?

С уважением,
Михаил.

Приложение:
procedure TForm1.DatBoxDrawItem(Control: TWinControl; Index: Integer;Rect: TRect; State: TOwnerDrawState);begin with (Control as TCheckListBox) do begin if ((Index div 3) mod 2 = 0) then Canvas.Brush.Color := RGB(150, 150, 150); Canvas.TextOut(Rect.Left, Rect.Top, Items.Strings[Index]); end;end;

Обсуждение

Неизвестный
24.11.2006, 14:22
общий
это ответ
Здравствуйте, Михаил73!

Добавте обработчик <b>CheckListBox1Click</b>, который имеет вид:

<code>
procedure TForm1.CheckListBox1Click(Sender: TObject);
begin
CheckListBox1.Repaint; //т.е просто перерисуйте компонент
end;
</code>

Good Luck!!!
Неизвестный
24.11.2006, 15:22
общий
это ответ
Здравствуйте, Михаил73!
По вашему коду вы не выделяете выделиный элемент. Я в приложении привожу код, в котором выделеный эленент выделяется.

Приложение:
procedure TForm1.DatBoxDrawItem(Control: TWinControl; Index: Integer;Rect: TRect; State: TOwnerDrawState);var OldBkMode:integerbegin with (Control as TCheckListBox) do begin // Делаем прозрачный фон для функций вывода текстов OldBKMode:=SetBKMode(Canvas.Handle,TRANSPARENT); if odSelect in State then begin // Элемент выбран Canvas.Brush.Color:=GetSysColor(COLOR_HIGHLIGHT); Canvas.Font.Color:=GetSysColorCOLOR_HIGHLIGHTTEXT); end else begin // Элемент не выбран if ((Index div 3) mod 2 = 0) then Canvas.Brush.Color := RGB(150, 150, 150) else Canvas.Brush.Color := RGB(255,255,255); Canvas.Font.Color := Font.Color; end; Canvas.FillRect(Rect); Canvas.TextOut(Rect.Left, Rect.Top, Items.Strings[Index]); SetBKMode(OldBkMode); end;end;
Форма ответа