Tipy a triky v Delphi, díl 103.

Dnešní díl nám přináší opět něco pro Windows XP. Tentokrát se naučíme použít "nekonečný" ukazatel průběhu.

Říkáte si, co je to asi zase za nesmysl? Jistě, obvyklý ukazatel průběhu nám znázorňuje v procentech, kolik už je hotovo z nějaké déle trvající činnosti, kterou počítač vykonává. Existují ale takové činnosti, jejichž délku předem neznáme a ani ji nedokážeme přibližně vypočítat, protože neznáme celkovou "sumu" úkolů. Přesto však chceme uživateli nějak dát najevo, že program pracuje a že se nezhroutil. A k tomu právě můžeme využít to, co jsem nazval možná trošku nejasně nekonečným ukazatelem průběhu. Určitě ho dobře znáte a jedna z jeho forem se zobrazuje například při samotném startu Windows XP během úvodního loga. Vizuálně se jedná o klasický ukazatel průběhu, v jehož úzkém proužku neustále dokola putuje krátký vyplněný úsek.

Tolik tedy úvodem a teď si povíme, jak na to. Dnešní postup bude poněkud netradiční, protože si vlastně vyrobíme velmi jednoduchou komponentu, která je odvozena z klasického ProgressBaru. Kód této komponenty bude vypadat takto:


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(`Samples`, [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.


Standardní ProgressBar je rozšířen o několik málo parametrů navíc. Nejdůležitější je vlastnost Active, kterou se spouští celá animace a dále AnimationSpeed, kterou nastavujeme její rychlost. Po instalaci se komponenta objeví na záložce Samples, což si můžete samozřejmě libovolně změnit.

Pokud vše proběhlo v pořádku, stačí teď jen otevřít nový projekt, umístit naši novou komponentu na formulář a případně upravit její vlastnosti a vzhled podle potřeby. To ovšem není vše. Aby celá věc fungovala, potřebujeme přidat i podporu nových stylů Windows XP. V Delphi 7 je to snadné, stačí jen na formulář přidat komponentu XPManifest ze záložky Win32. Ve starších verzích musíte přidat manifest sami a jak to udělat, to už jsme si kdysi důkladně předváděli.

Tento vylepšený ProgressBar bude fungovat i v případě, že máte vizuální styly Windows XP vypnuté, ale ve starších verzích Windows bohužel ne.

Diskuze (12) Další článek: Microsoft má zaplatit další půl miliardy

Témata článku: Software, Windows, Programování, Strong, Díl, Trik, Krátká animace


Určitě si přečtěte

Proč je pro obézní lidi tak těžké shodit nadbytečná kila?

Proč je pro obézní lidi tak těžké shodit nadbytečná kila?

** Obézním lidem selhávají mechanismy, jež je mají chránit před nadměrným příjmem potravy ** Mozek tlouštíků ignoruje hormon leptin varující před hromaděním tukové tkáně v těle ** Vědci nyní odhalili, jak to udělat, aby mozek otupený obezitou leptin opět vnímal

Jaroslav Petr | 47

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 66

Nová americká jaderná puma změní strategii boje

Nová americká jaderná puma změní strategii boje

** Bombardér Northrop Grumman B-2 Spirit amerického letectva nedávno svrhl jadernou pumu ** Šlo o test nové varianty pumy B61-12 ** Ta by měla mít hlavice schopné explodovat se silou 0,3 až 50 kilotun

Stanislav Mihulka | 60


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku