doublebuffered marquee progressbar

0

Witam.
Moj problem wyglada nastepująco:
Tworze komponent TProgressBarMarquee, ktory jest paskiem postepu dzialajacym w nieskonczonosc, czyli pokazuje, ze cos sie dzieje, ale nie jestem w stanie ocenic czasu trwania tej operacji.

Jego kod jest bardzo krotki i wyglada nastepujaco:

interface

uses Windows, ComCtrls, Messages, Controls;

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

type TProgressBarMarquee = class(TProgressBar)
  private
    FActive: Boolean;
    procedure SetActive(const Value: Boolean);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  published

  public

    property Active : Boolean read FActive write SetActive;
end;

implementation

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

procedure TProgressBarMarquee.SetActive(const Value: Boolean);
begin
  FActive := Value;
  if Value
     then SendMessage(Handle, PBM_SETMARQUEE, 1, 0)
     else SendMessage(Handle, PBM_SETMARQUEE, 0, 0);
end;

end.

Wszystko jest fajnie, poza jedna wadą - komponent odświeża sie na tyle często (jak to marquee), ze widac mruganie. Jest to strasznie nieestetyczne.
Gdy uzywamy zwyklego paska postepu TProgressBar, ten problem tez wystepuje, ale mozna go wyeliminowac przez uzycie podwojnego buforowania (DoubleBufferd := True).
Tutaj natomiast, gdy probuje tak zrobic, komponent "przestaje dzialac". Pasek postepu przestaje "latac". Po prostu nic sie nie dzieje.

Czy wie ktos jaka jest tego przyczyna i przede wszystkim jak to obejsc i jednak zastosowac tutaj podwojne buforowanie komponentu?

PS. Podwojne buforowanie calego formularza, czy tez nadrzednego kontenera jak np. TPanel powoduje albo taki sam skutek, albo wcale nie zwalcza migotania (czyli tak naprawde buforowania dalej nie ma na moim komponencie)

0

A nie prościej by było zrobić taką animacje, do gif czy coś takiego zapisać, i za pomocą TImage
i za pomocą image.Enabled:=true;

0

Nie bardzo, bo ProgressBar jest kontrolka systemowa i chocby korzysta z aktualnego schematu stylow. poza tym nie jest to rozwiazanie problemu, tylko obejscie go ze tak powiem od d**y strony ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1