![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |