Zprávy systému Windows a ošetření v Delphi
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zprávy systému Windows a ošetření v DelphiZprávy systému Windows a ošetření v Delphi

 

Zprávy systému Windows a ošetření v Delphi

Google       Google       3. 1. 2007       13 304×

Co je zpráva? Vágně řečeno, zpráva je krátká informace o tom, že se kdesi v systému něco stalo. Po tom, co uživatel udělal cokoli – pohnul myší, stisknul klávesu – ale i „velké“ operace, tedy pokyn k zavření okna, smazání souboru… A s nimi se v tomto článku naučíme pracovat…

Zprávy jsou ryze systémová záležitost, tedy v Delphi nejsou zprávy hlavní parketa, a proto můžeme již poměrně dlouhou dobu v Delphi programovat, aniž bychom pojem zpráva vůbec znali.

Poté, co systém Windows vytvoří zprávu, ji odešle aplikaci, které náleží, a zařadí jí do fronty zpráv pro zpracování smyčkou zprav, což je jakýsi proces v nitru aplikace, který má jedinný ůkol: Převzít zprávu a vyvolat náležitou proceduru, která ji zpracuje. Pozornému čtenáři jistě neunikla spojitost s principem programování v Delphi – „událostmi řízený“.

Ošetření zprávy

První příklad dává čtenáři představu, kolik zpráv asi tak v systému „běhá“. Ošetřovat budeme jednoduše bez rozlišení typů zpráv pomocí procedury Application.onmessage. Tato procedura je zavolána vždy, když smyčka zpráv vyhodnotí jakoukoli zprávu. Vytvoříme proceduru AppOnMessage a proměnnou PocetZprav a v události OnCreate formuláře svážeme námi vytvořenou proceduru s procedurou Application.onmessage. Nyní již kód:

type
  ...
  private
    { Private declarations }
    PocetZprav: Integer;            // atribut uchovavajici dosavadni pocet doslych zprav
    // procedura AppOnMessage bude spustena vzdy po doruceni jakekoliv zpravy
    procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
    ...

...
procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := "Počet zpráv: 0";
  Button1.Caption := "&Do seznamu";
  Edit1.Text := "";
  Application.OnMessage := AppOnMessage;    // svazeme udalost OnMessage a metodu AppOnMessage
  PocetZprav := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // pokud neni editacni pole prazdne, pridame text do seznamu
  if Edit1.Text <> "" then ListBox1.Items.Add(Edit1.Text);
end;

procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
begin
  Inc(PocetZprav);                // zvysime citac zprav
  // upravime titulek formulare
  Caption := "Počet zpráv: " + IntToStr(PocetZprav);
end;

Metoda OnMessage se o zprávě doví dřív než její konkrétní adresát (komponenta). Zprávy, které nejsou zde odchyceny, projdou dál do svého místa určení. Je však možno zajistit, aby zprávu dostal původní příjemce: provádí se to v parametru Handled, který označuje, zda je zpráva zpracována a nemá pokračovat dál či naopak. Jen tak pro zajímavost, zkuste dopsat do obsluhy události AppOnMessage řádek:

if Msg.message = $0118 then handled:=true;

Nezdá se vám efekt dostatečný? Zkuste dopsat pouze Handled:=true;, ale před tím doporučuji uložit rozpracovanou práci.

Po chvilkové práci s aplikací zjistíme, že počet zpráv není vůbec malý, a vezmeme-li v úvahu, že naše aplikace je opravdu jednoduchá, vyjde nám, že u velkých a složitých aplikací se počet zpráv pohybuje v řádu desetitisíců.

Tip: Ošetření události OnMessage nemusíme provádět programově jako v příkladu, jde to i pomocí komponenty ApplicationEvents z palety Additional. Ta nám „zapouzdřuje“ všechny procedury typu Application.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor je náruživý programátor v Delphi, učí se v prologu a rád čte, sportuje a ze všeho nejradši lyžuje.

Nové články

Obrázek ke článku Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý