Конференция "Компоненты" » Свойство Marquee в ProgressBar [D7, WinXP]
 
  • tipman © (14.03.07 14:08) [0]
    В VC есть, в делфи нет... Изобретать велосипед не стал, сразу посмотрел в нете, нашёл это MarqueeProgressBar. Просмотрел - вроде всё так... но не работает! И не могу понять почему, вроде всё просто, в MSDN смотрел, пишут что достаточно послать сообщение PBM_SETMARQUEE, что собственно и делается в компоненте. Что не так?
    unit MarqueeProgressBar;

    interface

    uses
    SysUtils, Windows, Classes, Controls, ComCtrls, Messages;

    type
    TMarqueeProgressBar = class(TProgressBar)
    private
    FActive: Boolean;
    FAnimationSpeed: Integer;
    procedure SetActive(const Value: Boolean);
    procedure SetAnimationSpeed(const Value: Integer);
    procedure UpdateProgressBar;
    protected
    procedure CreateParams(var Params: TCreateParams); override;
    public
    constructor Create(AOwner: TComponent); override;
    published
    property Active: Boolean read FActive write SetActive;
    property AnimationSpeed: Integer read FAnimationSpeed write SetAnimationSpeed;
    end;

    const
    PBS_MARQUEE = $08;
    PBM_SETMARQUEE = WM_USER + 10;

    procedure Register;

    implementation

    procedure Register;
    begin
    RegisterComponents('SwissDelphiCenter', [TMarqueeProgressBar]);
    end;

    constructor TMarqueeProgressBar.Create(AOwner: TComponent);
    begin
    inherited;
    FAnimationSpeed := 60;
    end;

    procedure TMarqueeProgressBar.CreateParams(var Params: TCreateParams);
    begin
    inherited;
    Params.Style := Params.Style or PBS_MARQUEE;
    end;

    procedure TMarqueeProgressBar.SetActive(const Value: Boolean);
    begin
    FActive := Value;
    UpdateProgressBar;
    end;

    procedure TMarqueeProgressBar.SetAnimationSpeed(const Value: Integer);
    begin
    FAnimationSpeed := Value;
    UpdateProgressBar;
    end;

    procedure TMarqueeProgressBar.UpdateProgressBar;
    begin
    if FActive then
    SendMessage(Self.Handle, PBM_SETMARQUEE, 1, FAnimationSpeed)
    else
    SendMessage(Self.Handle, PBM_SETMARQUEE, 0, 0);
    end;

    end.


    Источник: {Delphi World - http://delphiworld.narod.ru/}
  • tipman © (14.03.07 14:28) [1]
    ...упс.... не заметил.... это критично?

    This ProgressBar works only on Windows XP and the ComCtl32.dll version
     6.00 or later is needed. To use the new ComCtrl you have to provide the manifest.
     In Delphi 7 just drop TXPManifest on the form. For prior versions of Delphi
     you have to include the XP manifest resource.

    Операционка конечно XP, а вот TXPManifest не пользовал...
 
Конференция "Компоненты" » Свойство Marquee в ProgressBar [D7, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0.001]