Форум: "Основная";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
ВнизНеправильная отрисовка фона панели, лежащей в ScrollBox (XP темы) Найти похожие ветки
← →
Tack (2006-12-10 22:46) [0]На форме имеется PageControl, в нем на одном из TabSheet-ов лежит ScrollBox. В ScrollBox лежит большая Panel, которую ScrollBox прокручивает вверх-вниз.
При включенном стиле XP каждый TabSheet в фоне имеет приятный градиент по вертикали (от белого к сероватому). Тот же градиент отрисовывается и на ScrollBox, и на ее Panel, если у всех объектов свойство ParentBackground := True.
Это все выглядит замечательно, пока не начать прокручивать ScrollBox. Градиент панели после прокрутки ломается, и постепенно от всего градиента остается только два цвета, перемешанные на панели как придется.
Если кто-то сталкивался с такой проблемой, подскажите, как выйти из ситуации.
← →
AndreyRu (2006-12-11 16:02) [1]Повесь InvalidateRect на событие прокрутки
← →
Tack (2006-12-11 16:34) [2]Если прокрутка плавная (VertScrollBar.Tracking = True), то кошмарно моргает в процессе перерисовки. :-(
А можно ли как-то отключить XP-градиент TabSheet-а ?
← →
AndreyRu (2006-12-11 17:25) [3]Можно отлавливать событие WM_ERASEBKGND, wParam которого есть HDC - Контекст устройства, только вот тебе тогда придется компонентик небольшой написать.
//Component
type
TMeScrollBox = class(TScrollBox)
private
fColorBG : TColor;
procedure SetCol(val : TColor);
protected
procedure ErsBg(var message : TWMERASEBKGND); message WM_ERASEBKGND;
published
property ColorBg : TColor read fColorBG write SetCol;
end;
///-------------------------------------
procedure TMeScrollBox.ErsBg(var message : TWMERASEBKGND);
var
dc : HDC;
hb : HBrush;
r : TRect;
begin
dc := message.DC;
hb := CreateSolidBrush(ColorToRgb(fColorBG));
GetWindowRect(handle, r);
FillRect(dc, r, hb);
DeleteObject(hb);
end;
///-------------------------------------
procedure SetCol(val : TColor);
begin
if val = fColorBG then Exit;
fColorBG := val;
InvalidateRect(Handle, nil, true);
end;
///-------------------------------------
Инсталиш компонент и с XP должно работать.
← →
Tack (2006-12-11 17:44) [4]спасибо, попробую
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c