Форум: "KOL";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизПомогите разобраться с OwnerDraw для ListBox... Найти похожие ветки
← →
Danil (2003-01-12 01:53) [0]Дело вот в чём: у меня на форме есть определённый фон, который не хотелось бы закрашивать, поэтому я и решил обрабатывать OnDrawItem.
Вот как я пробую:
function Tform_main.list_mainDrawItem(Sender: PObj; DC: HDC;
const Rect: TRect; ItemIdx: Integer; DrawAction: TDrawAction;
ItemState: TDrawState): Boolean;
var TextRect : TRect;
begin
TextRect := Rect;
inc(TextRect.Left, 4);
FillRect(DC, textrect, 0);
DrawText(DC,
pchar(pcontrol(sender).Items[ItemIdx]),
Length(pcontrol(sender).Items[ItemIdx]),
TextRect,
DT_NOCLIP or DT_NOPREFIX
( rect"ы) Дело вот в чём: у меня на форме есть определённый фон, который не хотелось бы закрашивать, поэтому я и решил обрабатывать OnDrawItem.
Вот как я пробую:
function Tform_main.list_mainDrawItem(Sender: PObj; DC: HDC;
const Rect: TRect; ItemIdx: Integer; DrawAction: TDrawAction;
ItemState: TDrawState): Boolean;
var TextRect : TRect;
begin
TextRect := Rect;
inc(TextRect.Left, 4);
FillRect(DC, textrect, 0);
DrawText(DC,
pchar(pcontrol(sender).Items[ItemIdx]),
Length(pcontrol(sender).Items[ItemIdx]),
TextRect,
DT_NOCLIP or DT_NOPREFIX
);
result := false;
end;
В принципе работает, но вы попробуйте у себя: меня достают эти белые полосочки (rect"ы), которые мелькают невпопад во время щёлчков. Как их можно убрать (пробовал в начале {if (odsSelected in ItemState) then exit}, но как тогда выделенные элементы обрабатывать?)? И ещё глюк, который возникает, если нажать кнопку мыши и протащить по всем элементам... А также если вставить в начало такой вот кусочек
if odd(itemidx) then pcontrol(sender).Font.Color := $00DEBB8F
else pcontrol(sender).Font.Color := clWhite;
то процессор начинает работать на 100% и эта установка цвета шрифта не срабатывает. Ещё я как-то добился "срабатывания" смены цвета шрифта, но он менялся как-то сразу, для всех элементов в зависимости от текущего (т.е. если текущий нечётный, то все белые, иначе все "голубые" ;-))
Как вы (это я к All) обрабатываете это событие? Или что вы посоветуете в этом частном случае?
PS Мне сейчас пришла в голову замечательная идея - попробовать в OnPaint"е нарисовать кусочек перекрываемого фона. Надо попробовать... Но не думаю, что получится то, что я хочу. Да к тому же у меня табулированный список...
← →
Vladimir Kladov (2003-01-14 07:13) [1]Может, на listview перейти? Табулированный список... Нет (таких) проблем с Transparent
← →
Bartov (2003-01-14 07:56) [2]2Danil
Посмотри BAPDriveBox, там на твой вопрос есть ответ.
← →
Danil (2003-01-16 01:24) [3]2 Vladimir Kladov: я всё-таки обошёлся листбоксом с loTabstops и LB_SETTABSTOPS. А также событием на колёсико мышки (просто invalidate).
А LV я попробовал - он как бы не до конца transparent, т.е. свободная часть прозрачная, а вот textBkColor - сплошная заливка... Как я только ни пытался это обойти.
2 Bartov: то, что у меня получилось, я брал из KOLColorComboBox.pas из пакета Enhaunced Combos. Но это подошло сразу же (я аж очень удивился!) для комбобоксов, а вот для листбокса не очень подошло (это применительно к моему случаю без перекрытия фона). Пришлось оставить затею OwnerDraw и просто воспользоваться loNoExtendSel и Transparent. Глюки всё равно есть (уже они в прошлом! - см. дальше), но хоть что-то.
Во время писАния этого поста ко мне в голову пришла гениальная идея!.. Дело в том, что глюки заключались в том, что когда ведёшь "нажатой" мышкой по нескольким (или всем) пунктам, то все они подсвечиваются и перекрывают фон, "отпускаются" только при отпускании мыши. Так вот: сейчас я поставил на OnMouseDown просто sender.invalidate - как рукой сняло ;-). Теперь всё супер!..
Потом, если хотите, дам адрес, где можно скачать то, что я намастерил. Да вы, может, и сами узнаете ;-) от софтодрома и подобного... (да и в анкете если пороетесь)
← →
Bartov (2003-01-16 01:29) [4]2Danil
Потом, если хотите, дам адрес, где можно скачать то, что я намастерил.
Ага, давай, посмотрим ;-)
← →
Danil (2003-01-16 23:36) [5]2 Bartov
Готовое произведение исскуства =) будет готово через несколько дней, когда оттестю и т.д. Просто в этот раз я по своему необыкновению сначала взялся за интерфейс, а не за программную реализацию, которая, однако, практически "додумана"...
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c