Недавно добавленные исходники

•  Animation Loaders  1 068

•  DeLiKaTeS Tetris (Тетрис)  6 002

•  TDictionary Custom Sort  7 930

•  Fast Watermark Sources  7 588

•  3D Designer  10 830

•  Sik Screen Capture  8 172

•  Patch Maker  8 360

•  Айболит (remote control)  8 411

•  ListBox Drag & Drop  7 277

•  Доска для игры Реверси  101 619

•  Графические эффекты  8 466

•  Рисование по маске  7 833

•  Перетаскивание изображений  6 424

•  Canvas Drawing  6 808

•  Рисование Луны  6 748

•  Поворот изображения  5 842

•  Рисование стержней  4 794

•  Paint on Shape  3 485

•  Генератор кроссвордов  4 513

•  Головоломка Paletto  3 627

•  Теорема Монжа об окружностях  4 415

•  Пазл Numbrix  2 868

•  Заборы и коммивояжеры  3 818

•  Игра HIP  2 587

•  Игра Go (Го)  2 602

•  Симулятор лифта  2 981

•  Программа укладки плитки  2 411

•  Генератор лабиринта  3 158

•  Проверка числового ввода  2 643

•  HEX View  3 056

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Некорректность реализации свойства 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 © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте