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

•  TDictionary Custom Sort  514

•  Fast Watermark Sources  878

•  3D Designer  1 809

•  Sik Screen Capture  1 458

•  Patch Maker  1 465

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

•  ListBox Drag & Drop  1 163

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

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

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

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

•  Canvas Drawing  965

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

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

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

•  Paint on Shape  489

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

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

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

•  Пазл Numbrix  609

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

•  Игра HIP  551

•  Игра Go (Го)  523

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

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

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

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

•  HEX View  596

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

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

 
скрыть


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-2022 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

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