Tipy a triky v Delphi, díl 110. - práce ve volném čase

Dneska naučíme naší aplikaci něco dělat, i když zrovna nic nedělá. Připadá vám to zmatené? Čtěte dál a hned se vyjasní.
Oč se tedy bude dnes jednat? Naše spuštěná aplikace není zrovna vždy dostatečně vytížena. Dalo by se říct, že většinu času čeká na nějaký vstup ze strany uživatele a nedělá nic. Dostává se do stavu idle, tedy mimo aktivitu. Naopak jsou zase chvíle, kdy aplikace "jede" na maximum a pak zase od ní nemůžeme očekávat nějakou jinou činnost. Právě v době, kdy aplikace nedělá "nic" můžeme tohoto času využít a uložit jí některé "méně náročné" a ne tak důležité úkoly. Co to může být konkrétně, to již nechám na vás. My si jen dnes ukážeme, jak detekovat stav, kdy se aplikace dostane do klidu, a jak jí říci, co má v tu dobu dělat.

Vše má na starosti událost OnIdle, která je vyvolána právě v okamžiku, kdy se aplikace dostane do klidu. Kdy to přesně nastane, to záleží již na systému. Tato událost ale nepatří k formuláři (TForm), ale přímo k nadřazenému objektu TApplication, ke kterému nemáme přístup přes Object Inspectora. Nejprve v události OnCreate hlavního formuláře přesměrujeme událost OnIdle na provádění našeho kódu. Ten poté specifikujeme v samostatné proceduře. Bude se jednat pouze o vizuální reprezentaci stavu nečinnosti, který bude v tomto případě znázorněn pomocí komponenty ProgressBar. V době nečinnosti aplikace se bude ProgressBar postupně zvětšovat od nuly do maxima a tak stále dokola. Umístěte tedy na formulář ProgressBar.

Pro simulaci nějaké činnosti aplikace si přidáme na formulář tlačítko a do události OnClick umístíme jednoduchý repeat cyklus, který bude po 10 sekund simulovat zatížení aplikace.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ProgressBar1: TProgressBar;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure MyIdleHandler(Sender: TObject; var done: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyIdleHandler(Sender: TObject; var done: Boolean);
begin
  if ProgressBar1.Position <100 then ProgressBar1.Position := ProgressBar1.Position + 1
                                else ProgressBar1.Position := 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := MyIdleHandler;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  dt, dtn: TDateTime;
begin
  dt := Now;
  repeat
    dtn := Now;
  until dtn > (dt + 10 / 3600 / 24);
end;

end.

Pochopitelně je rozumné, umístit do Idle části pouze takový kód, který nebude příliš náročný a nebude aplikaci moc zatěžovat, protože pak by to jaksi nemělo moc smysl. Jinak se pochopitelně fantazii meze nekladou.

Diskuze (9) Další článek: Jak se UPC Mistral změní na chello

Témata článku: Software, Windows, Programování, Maximum, Maxima, Čas, Práce, Maxim, Díl, Trik, Spuštěná aplikace


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

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Google má nové telefony, počítač a domácí displej. Česko je stále mimo

Google má nové telefony, počítač a domácí displej. Česko je stále mimo

** Google dnes představil novinky ** Dočkali jsme se nového telefonu Pixel 3, tabletopočítače a domácího displeje ** Rozšíření Google Assistenta do dalších zemí se bohužel nekoná

David Polesný | 45


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