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

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       9 476×

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…

Reklama
Reklama

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 Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý