Текущий архив: 2008.02.03;
Скачать: CL | DM;
ВнизTListBox, CNDrawItem Найти похожие ветки
← →
Pavelq (2008-01-05 23:07) [0]Мне захотелось из TListBox убрать выделение фокуса (избавиться от прорисовки DrawFocusRect), я попробовал сделать наследника TListBox:
TListBox = class(StdCtrls.TListBox)
private
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
end;
В котором обработать CN_DRAWITEM по своему, без вызова DrawFocusRect. (Получается, что мне нужно избавиться только от одной строки из оригинала)procedure TCustomListBox.CNDrawItem(var Message: TWMDrawItem);
var
State: TOwnerDrawState;
begin
with Message.DrawItemStruct^ do
begin
State := TOwnerDrawState(LongRec(itemState).Lo);
FCanvas.Handle := hDC;
FCanvas.Font := Font;
FCanvas.Brush := Brush;
if (Integer(itemID) >= 0) and (odSelected in State) then
begin
FCanvas.Brush.Color := clHighlight;
FCanvas.Font.Color := clHighlightText
end;
if Integer(itemID) >= 0 then
DrawItem(itemID, rcItem, State) else
FCanvas.FillRect(rcItem);
if odFocused in State then DrawFocusRect(hDC, rcItem);
FCanvas.Handle := 0;
end;
end;
Но понятное дело мне не удается реализовать задумку, ибо например FCanvas находится в private у оргинала, и у меня нет доступа к нему из наследника.
Что в таком случае сделть?
← →
Джо © (2008-01-05 23:13) [1]Рисуй в обработчике OnDrawItem при Style := OwnerDrawFixed.
← →
{RASkov} © (2008-01-05 23:16) [2]> [0] Pavelq (05.01.08 23:07)
Зато остается Canvas :) Чем он тебе не угодил?)
ЗЫ Букавку F убери....
← →
{RASkov} © (2008-01-05 23:17) [3]Кстати... да, что бы заного отрисовать содержимое листбокса, незачем делать наследника.... См [1]
Страницы: 1 вся ветка
Текущий архив: 2008.02.03;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.043 c