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

•  3D Designer  86

•  Sik Screen Capture  68

•  Patch Maker  63

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

•  ListBox Drag & Drop  64

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

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

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

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

•  Canvas Drawing  54

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

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

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

•  Paint on Shape  35

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

•  Головоломка Paletto  51

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

•  Пазл Numbrix  46

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

•  Игра HIP  52

•  Игра Go (Го)  45

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

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

•  Генератор лабиринта  90

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

•  HEX View  93

•  Физический маятник  96

•  Задача коммивояжера  123

•  Автомобильная пробка  47

•  Квадратные сетки из слов  40

 
скрыть


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

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



Некорректность реализации свойства 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 можно создать исключение, но это уже на любителя.





Похожие по теме исходники

Improved Buttons and ProgressBar

Advanced ProgressBar

ProgressBar in ListView

Marquee ProgressBar

 

Marquee ProgressBar by Florenth

TQProgressBar

Copy File with ProgressBar




Copyright © 2004-2021 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter