![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#10
|
||||
|
||||
![]() cotseec, Спасибо. Ты прав. Отключил буферизацию, и полоса пропала. А вот обрабатывать WM_ERASEBKGND в моём случае будет не совсем к месту.
Но при отключении буферизации, немного мерцать начинать иногда.. Эта чёрная полоса - это background заднего буфера. Фокус в том, что везде пишут - в начале отрисовки ставится FillRect(ClientRect), т.е. закрашивают весь контрол фоном, а потом рисуют все итемы, а это кощунство. я не закрашиваю всю область фоном, а просто рисую итем. Таким образом, если сделать FillRect(ClientRect), то весь контрол будет белым, а нарисован только выделенный итем. Вообщем придумал костыль =D Код:
Var ... backclear:integer; Sinf:TScrollInfo; maxPos:Integer; begin Sinf.cbSize:= SizeOf(ScrollInfo); Sinf.fMask := SIF_POS + SIF_RANGE + SIF_PAGE; GetScrollInfo(Control.Handle, SB_VERT, Sinf); MaxPos:=Sinf.nMax - Round(Sinf.nPage) + 1; if Sinf.nPos = MaxPos then with (Control as TListBox).Canvas do begin Brush.Color:=ClWindow; BackRect:=ClientRect; backclear:=(Control as TListBox).Height mod (Control as TListBox).ItemHeight; BackRect.Top:=(Control as TListBox).Height-backclear; FillRect(BackRect); end; ... Програмистами не рождаются, ими становятся! Последний раз редактировалось SCrat.ORS, 13.06.2015 в 15:08. |