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


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 | 28

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

Rekordy počasí: V Česku to ještě jde, skutečné extrémy zažívají jinde

** Teplotní extrémy dokážou překvapit. Seznamte se s rekordy v Česku i ve světě ** Rekordní hodnoty jsou mnohdy až k neuvěření ** Zjistěte, kdy ke bylo největší horko, zima, déšť či vítr

Karel Kilián | 7

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 60

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

** Microsoft představil nový tablet Surface Go ** Nový model zaujme nízkou cenou, ale schopnostmi zařízení Surface ** Microsoft nepoužil čip ARM, ale klasický procesor od Intelu 

Karel Javůrek | 116


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji