Программы   Загрузка Партнерство   О компании Контакты  
 
                    
  Карта Сайта   
   

Некорректность реализации свойства BorderWidth у ProgressBar

Автор: VS

При использовании в компонентах свойства BorderWidth будте внимательны. В большинстве компонентов (ControlBar, ProgressBar, StatusBar, ToolBar, TrackBar и т.д.), это свойство реализовано некорректно. Можно получить забавные результаты или большие неприятности.

На рисунке показаны возможные варианты при использовании различных значений BorderWidth в компоненте ProgressBar. Высота компонента ProgressBar.Height = 16.

В последних двух вариантах вместо индикатора – изображение под активным окном. Не надейтесь, что компонент стал "прозрачным". Это "моментальный снимок" при создании окна.

Если есть желание, то некорректность можно исправить в ComCtrls.pas, переопределив BorderWidth.


TProgressBar = class(TWinControl)
private
  FBorderWidth: TBorderWidth;
  procedure SetBorderWidth(Value: TBorderWidth);
published
  property BorderWidth: TBorderWidth read FBorderWidth write SetBorderWidth;

...

constructor TProgressBar.Create(AOwner: TComponent);
begin
    FBorderWidth := inherited BorderWidth;
end;

procedure TProgressBar.SetBorderWidth(Value: TBorderWidth);
begin
  if Value > (Height div 2) - 3 then
    Exit
      if Value <> inherited BorderWidth then
    begin
      inherited BorderWidth := Value;
      FBorderWidth := inherited BorderWidth;
    end;
end;

Аналогичный подход можно использовать в других компонентах. В процедуре SetBorderWidth вместо Exit можно создать исключение, но это уже на любителя.

           


Образец карты - бесплатно: бесконтактные карты. Бесконтактные карты доступа. . биржевые цены на медные шины . скрапбукинг интернет магазин, бумага . профессиональные радиоуправляемые вертолеты . мстители смотреть онлайн .


Программы  |  Загрузка  |  Партнерство  |  О компании  |  Контакты

Copyright © LSD Software 2006 - 2011