Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-71474
stud
2003-09-01 16:56
2003.09.22
в базе данных странные вещи!


14-71856
Soft
2003-08-30 14:28
2003.09.22
Кто, что обо мне думает?


14-71823
iNew
2003-09-02 05:10
2003.09.22
Как в SoftIce поставить брэкпоинт на открытие файла?


1-71609
qwerty2
2003-09-09 15:26
2003.09.22
Настройка безопасности DCOM


1-71748
begemot
2003-09-07 22:39
2003.09.22
Combobox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский