Форум: "WinAPI";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизСабклассинг TListBox - не ловится WM_DRAWITEM Найти похожие ветки
← →
wild sam (2006-03-15 01:29) [0]Здравствуйте. Хочу избавиться от рисования FocusedRect в TListBoxe c OwnerDraw. Наследника писать не хотелось, поэтому решил засабклассить и перекрыть WM_DRAWITEM. Проблема в том, что в новой оконной процедуре оно не появляется. Все остальные - WM_NCPAINT, например, срабатывают. WM_DRAWITEM - нет. Что это может быть?
Спасибо!
← →
Джо © (2006-03-15 01:33) [1]> Хочу избавиться от рисования FocusedRect в TListBoxe c OwnerDraw
Так что мешает сделать в таком роде:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with TListBox(Control).Canvas do
begin
if odSelected in State then
begin
Brush.Color := clActiveCaption;
Font.Color := clHighlightText;
end
else
begin
Brush.Color := clWindow;
Font.Color := clWindowText;
end;
ListBox1.Canvas. FillRect (Rect);
TextOut(Rect.Left,Rect.Top,TListBox(Control).Items[Index]);
// рамку затираем только на выделенной строке
if (odSelected in State) and (odFocused in State) then
DrawFocusRect (Rect);
end;
end;
← →
wild sam (2006-03-15 01:45) [2]Упс. Это, действительно, работает :) Я читал про XOR при выводе DrawFocusRect, но реализовать не получилось. Решил, что придется делать сложно.
Спасибо большое!
← →
clickmaker © (2006-03-15 12:05) [3]
> wild sam (15.03.06 01:45) [2]
для справки: wm_drawitem посылается родителю листбокса
← →
wild sam (2006-03-15 18:13) [4]Да, я в курсе. Пробовал перехватывать и cn_drawitem - тот же результат.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.057 c