Главная страница
    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.45 MB
Время: 0.044 c
2-1169314081
FIL-23
2007-01-20 20:28
2007.02.04
как перевести символ в двоичный код и обратно?


15-1168590761
6548
2007-01-12 11:32
2007.02.04
эмуляция действий


15-1168654314
Константинов
2007-01-13 05:11
2007.02.04
Какой будет жизнь лет этак через двадцать?


15-1168688652
Kerk
2007-01-13 14:44
2007.02.04
Самые дорогие кейворды Google Adsense


15-1169022430
shikitomedo2
2007-01-17 11:27
2007.02.04
Как распознать на собеседовании неадекватного работодателя?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский