Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #10  
Старый 13.06.2015, 12:46
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

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;
...
Извлекаем информацию от скролла листбокса, если он находится внизу, - это сигнализирует о том, что там может нарисоваться эта черная полоса заднего буфера, Поэтому берём всю клиентскую область, смотрим сколько итемов может влезти, и забираем остаток области, и закрашиваем её =D
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 13.06.2015 в 15:08.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:47.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025