Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

Неправильная отрисовка фона панели, лежащей в 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.063 c
2-1169036841
root
2007-01-17 15:27
2007.02.04
Как узнать под каким пользователем загруженна программа


4-1158880909
Worker
2006-09-22 03:21
2007.02.04
Как получить список зарегистрированных служб


15-1168706846
Kolan
2007-01-13 19:47
2007.02.04
Чем заменить NAN


2-1169068778
Kostafey
2007-01-18 00:19
2007.02.04
Как удилить в строке пробелы ?


2-1168774269
click
2007-01-14 14:31
2007.02.04
Excel: сохраняет "ненужные" копии файлов