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, Trik, Díl, Krátká animace


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

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 32

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

Vybrali jsme 16 programovatelných hraček a stavebnic pro děti. A vlastně i pro vás

** Získejte děti pro matematiku a základy techniky ** Kupte jim hračku nebo stavebnici, které vdechnou vlastní život ** Vybrali jsme 16 stavebnic pro nejmenší caparty i vás samotné

Jakub Čížek | 16

Čistič moře nejenže nefunguje, ale navíc se láme

Čistič moře nejenže nefunguje, ale navíc se láme

** Zařízení v hodnotě 40 milionů dolarů mělo sbírat z hladiny oceánu plovoucí plastový odpad ** Mise ale nenaplňuje očekávání ** Šest set metrů dlouhé monstrum nejen moře nečistí, ale navíc rozpadá

Jaroslav Petr | 24

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

Google Mapy vs. Mapy.cz: Které internetové mapy jsou lepší?

** Jsou lepší mapy od Googlu, nebo ty od Seznamu? ** Má být mapa především tradiční mapou, nebo spíše asistentem? ** Vyslechněte si argumenty a hlasujte, na jaké straně jste vy

Jakub Čížek, Vladislav Kluska | 78

Pojďme programovat elektroniku: Vyzkoušíme IR, ovládneme světýlko přes Bluetooth a vyšleme zprávu na sto metrů

Pojďme programovat elektroniku: Vyzkoušíme IR, ovládneme světýlko přes Bluetooth a vyšleme zprávu na sto metrů

** Budeme odposlouchávat IR ovladač klimatizace ** Vyrobíme laciný rádiový vysílač ** Vyzkoušíme komunikaci pomocí Bluetooth a v pásmu 433 MHz

Jakub Čížek | 20



Aktuální číslo časopisu Computer

Jak nastavit a ochránit nový mobil

Velký test bezdrátových klávesnicí a myší

Počítače v roce 2019

Srovnání barevných laserových multifunkcí