11. Přednáška PPR  Zprávy ve Win  TMsg  Zprávy v Delphi  Obsluha zpráv v Delphi  Všechny zprávy aplikace  Posílání vlastních zpráv  Komponenty 

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Programování v prostředí Windows Mobile 3. LEKCE Procedura okna Třídy 1 LEKCE č. II; Karel Pavlík, FJFI - ČVUT, ©2007.
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Vstupy a výstupy v JavaScriptu Vstup: použitím metody prompt objektu window čtením hodnot z položek formuláře Výstup : použitím metody alert objektu window.
Vnitřní řazení v poli (in sito)
10. Dynamické datové struktury
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Programování v Pascalu Přednáška 8
Programování v Pascalu Přednáška 10 RNDr. Hana Havelková.
Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.
Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.
Konstanty jsou datové objekty jejich hodnoty nelze v programu měnit Deklarace Const jméno = hodnota Příklad: Textový řetězec ZPRAVA Const ZPRAVA = “Zadej.
Algoritmizace a programování Datové typy v Delphi - 05
Algoritmizace a programování Podprogramy v Delphi - 10
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Hromadná korespondence
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
Hana Kotinová Struktura a cíl práce Metody předzpracování dat Systémy předzpracování dat Historie vývoje DPT Jak program pracuje Budoucnost.
Dynamické modelování PVY 2. pololetí 4.cv Bc. Jiří Šilhán.
Informatika I 3. přednáška
Procedury a funkce Základní charakteristika a použití v programu.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Mgr. Jan Lavrinčík, DiS..  pro proměnnou typu Date alokováno 8 bajtů paměti, které obsahují spakovaný vzorek bitů nejen pro datum, ale i pro přesný čas.
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
DATOVÉ MODELY (c) Tralvex Yeap. All Rights Reserved.
Algoritmy a programovací techniky
Organizace a zpracování dat I
Objektové programování
TEXTOVÝ EDITOR.
JavaScript Podmínky, cykly a pole.
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
Konstanty u jsou datové objekty u jejich hodnoty nelze v programu měnit u Deklarace Const jméno = hodnota Příklad: Textový řetězec ZPRAVA Const ZPRAVA.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
Algoritmizace a programování Binární soubory - 14 Mgr. Josef Nožička IKT Algoritmizace a programování
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Objektově orientované programování - cvičení 1
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
PHP Vytváření formuláře.
2 UDÁLOSTI ONMOUSEOVER, ONMOUSEOUT Odkaz Událost je část kódu vyvolana za určité (uživatelem vyvolané) situace (kliknutí myší, přejetím kurzorem myši,
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
Programování v prostředí Windows Mobile 2. lekce Průvodce, části programu 1 LEKCE č. II; Karel Pavlík, FJFI - ČVUT, ©2007.
Šesté cvičení Výjimky Balíky.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
6. Typ záznam Strukturovaný datový typ - znamená spojení několika elementů stejného nebo různých typů do jedné proměnné. Např. pole je strukturovaný datový.
Informatika I 12. přednáška RNDr. Jiří Dvořák, CSc.
Cvičení 3-4 Procedury, funkce,řetězce. Procedury Procedura Procedura Procedura je podprogram, který mění stav programu (změnou stavu proměnných nebo změnou.
Diář 1 Kalendář. Diář Základem diáře je kalendárium, ve kterém můžeme prohlížet jednotlivé měsíce Základem diáře je kalendárium, ve kterém můžeme prohlížet.
Hromadná korespondence 2 Word Předmět: Informační a komunikační technologie Autor: Milan Franek.
Úvod do Delphi - 2.hodina OB21-OP-EL-KON-DOL-M-4-006B Orbis pictus 21. století.
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Strukturované typy proměnných v programovacím jazyce Pascal - 1.hodina
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Programování 2. hodina RNDr. Jan Lánský, Ph.D.
Strukturované typy proměnných v programovacím jazyce Pascal - 2.hodina
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
MU002 – Informační technologie Základy algoritmizace 4/13
MU002 – Informační technologie Základy algoritmizace 5/13
Programování v prostředí Borland Delphi
Transkript prezentace:

11. Přednáška PPR  Zprávy ve Win  TMsg  Zprávy v Delphi  Obsluha zpráv v Delphi  Všechny zprávy aplikace  Posílání vlastních zpráv  Komponenty  Volba předka  První komponenta

Zprávy ve Windows Oznámení o výskytu nějaké události, kterou Win posílají např. naší aplikaci, aby se tato dozvěděla, že se děje něco, co se jí týká. Obsahuje informace o typu události, která nastala a další specifické info pro konkrétní druh zprávy ZPRÁVA sama je záznam-record = TMsg. Fronta zpráv – Message queue Cyklus zpráv – Message loop Procedura okna - Window procedure  Co se zprávou?  Coje zpráva - message  Jak je zpráva implementována?

TMsg type TMsg = record Hwnd : Hwnd;// handle okna, pro které je zpráva určena message : Word;// konstanta identifikující zprávu wParam : Longint; // 32 bitová info specifická pro danou zprávu např. Handle okna souvisejícího se zprávou lParam : Longint;// často ukazatel na nějaká data v paměti time : Longint;// čas, kdy byla zpráva vytvořena pt : Tpoint;// pozice kurzoru myši, když vznikla zpráva end;  Co když přichází „stejné zprávy“ dané aplikaci? Buď se zařadí poslušně na konec fronty Nebo se nová zpráva ignoruje – známý případ časovače  Formulář  Tlačítka  Seznamy  Editační pole ……

Zprávy v Delphi Cyklus zpráv je vestavěn do VCL a proto se o to nemusíme starat. Tedy o vybírání zpráv z fronty zpráv a o jejich doručování jsme zatím nemuseli nic vědět. TMsg převedou Delphi na TMessage Type TMessage = record MSg : Cardinal ; case Integer of 0: ( WParam : Longint; LParam : Longint; Result : Longint ); 1: (WParamLo : Word; WParamHi : Word; LParamLo : Word; LParamHi : Word; ResultLo: Word; ResultHi: Word); end; TMessage Je generická datová struktura pro uchování jakékoliv zprávy type TMsg = record Hwnd : Hwnd; message : Word; wParam : Longint; lParam : Longint; time : Longint; pt : Tpoint; end;

Nahlédněte do Message.pas Pro další zjednodušení práce se zprávami Delphi poskytují speciální datové typy pro určité typy zpráv Nemusíme tedy dekódovat parametry obecných typů TWMMouse = record Msg : Cardinal; Keys :Longint; case Integer of 0: (Xpos : SmallInt; Ypos : SmallInt); 1: (Pos : TsmallPoint; Result : Longint); end; TWMKey = packed record Msg : Cardinal; CharCode: Word; Unused : Word; KeyData : Longint; Result: Longint; End;  specializace dále pokračuje

 TWMMouseWheel = packed record  Msg: Cardinal;  Keys: SmallInt;  WheelDelta: SmallInt;  case Integer of  0: (  XPos: Smallint;  YPos: Smallint);  1: (  Pos: TSmallPoint;  Result: Longint);  end;  TMSHMouseWheel = packed record  Msg: Cardinal;  WheelDelta: Integer;  case Integer of  0: (  XPos: Smallint;  YPos: Smallint);  1: (  Pos: TSmallPoint;  Result: Longint);  end;  TWMLButtonDblClk = TWMMouse;  TWMLButtonDown = TWMMouse;  TWMLButtonUp = TWMMouse;  TWMMButtonDblClk = TWMMouse;  TWMMButtonDown = TWMMouse;  TWMMButtonUp = TWMMouse;  Typy myších události

Obsluha zpráv v Delphi  Běžná situace = obsluha událostí  Výjimečná situace  Standardní situaci potřebujeme ošetřit nestandardním způsobem  Chceme ošetřit speciální zprávu, která není zapouzdřena do události Delphi  Vytvoříme metodu objektové třídy, která má danou zprávu zachytit  Jeden z parametrů metody musí být typu TMessage nebo typu specifikujícího zprávu  V deklaraci musíme použít direktivu message a za ní zprávu, která ošetřena má být

Příklad. Type TForm = class (TForm) private procedure WMPaint ( var Msg : TWMPaint ); message wm_Paint; public end; var Form1 : TForm1; Implementation procedure TForm1.WMPaint ( var Msg: TWMPaint ); begin MessageBeep (0); Inherited; end;.

TApplication.OnMessage vidí na všechny zprávy, které jsou poslány všem oknům aplikace. Je to nejvíc zaneprázděné místo aplikace – desítky i víc zpráv za vteřinu. Obsluha události OnMessage je typu TMessageEvent a musí být definována s hlavičkou procedure SomeObject.AppMessageHandler( var Msg: TMsg; var Handled : boolean); procedure TForm1.AppMessageHandler( var Msg: TMsg; var Handled: Boolean); begin Inc(NumMessage); Handled := False; end; Application.OnMessage := AppMessageHandler;  Detaily domyslet

TApplication.OnMessage II. Když na onMessage přiřadím nějakou proceduru, bude se tato volat kdykoliv je z fronty vybrána zpráva a má být zpracována, ale ještě není.

Posílání vlastních zpráv Občas budeme potřebovat poslat zprávy mezi okny nebo ovládacími prvky naší aplikace. Delphi poskytují k tomuto účelu několik možností: 1. metodu Perform(), která pracuje nezávisle na WIN API 2. funkce API SendMessage(), PostMessage() VCL poskytuje metodu Perform() pro všechny potomky TControl. function Perform ( Msg : Cardinal; wParam, lParam : Longint ): Longint ;

function TControl.Perform (Msg: Cardinal; WParam, Lparam: Longint): Longint; var Message: TMessage; begin Message.Msg := Msg; Message.WParam := WParam; Message.LParam := LParam; Message.Result := 0; if Self <> nil then WindowProc(Message); Result := Message.Result; end;  Toto mohu použít, pokud mám odkaz na instanci cílového prvku (objektu),  když ho nemám – například chci poslat zprávu oknu, které není z Delphi  a mám pouze handle okna, použijeme 2

SendMessage() &PostMessage()  SendMessage() pošle zprávu přímo proceduře okna a čeká, dokud nebude zpráva zpracována.  PostMessage() pošle zprávu do fronty zpráv okna a vrací se okamžitě. Function SendMessage( hWnd : HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;  hWndhandle okna, kterému je zpráva určena  Msgidentifikátor zprávy  Wparam32bitová info specifická pro danou zprávu  LParam32bitová info specifická pro danou zprávu Jak se budou lišit návratové hodnoty těchto dvou funkcí?

Zprávy oznamovací notification message – to jsou zprávy, které se posílají rodičovskému oknu, když se v jednom z jeho podřízených ovládacích prvků přihodí něco, co může vyžadovat pozornost rodiče. Tyto zprávy se vyskytují pouze u standardních controls WINDOWS – tlačítek, seznamů, editačních polí - například vybrání textu, posun posouvacího pruhu, klik na controls – to potom vygeneruje notification message, Což v Delphi je obsluhujeme v událostech příslušného ovládacího prvku Co může být příčinou vzniku takové zprávy?

Kombinované okénko se seznamem

Interní zprávy VCL  CM_xxxx Component message  CN_xxxx Component notification Co jsme si zůstali dlužni?  Vlastní zprávy  Posílání zpráv mezi aplikacemi  Hromadné posílání zpráv

 { Window Messages } const {$EXTERNALSYM WM_NULL} WM_NULL = $0000; {$EXTERNALSYM WM_CREATE} WM_CREATE = $0001; {$EXTERNALSYM WM_DESTROY} WM_DESTROY = $0002; {$EXTERNALSYM WM_MOVE} WM_MOVE = $0003; {$EXTERNALSYM WM_SIZE} WM_SIZE = $0005; {$EXTERNALSYM WM_ACTIVATE} WM_ACTIVATE = $0006; {$EXTERNALSYM WM_SETFOCUS} WM_SETFOCUS = $0007; {$EXTERNALSYM WM_KILLFOCUS} WM_KILLFOCUS = $0008; {$EXTERNALSYM WM_ENABLE} WM_ENABLE = $000A; {$EXTERNALSYM WM_SETREDRAW} WM_SETREDRAW = $000B; {$EXTERNALSYM WM_SETTEXT} WM_SETTEXT = $000C; {$EXTERNALSYM WM_GETTEXT} WM_GETTEXT = $000D; {$EXTERNALSYM WM_GETTEXTLENGTH} WM_GETTEXTLENGTH = $000E; {$EXTERNALSYM WM_PAINT} WM_PAINT = $000F; {$EXTERNALSYM WM_CLOSE} WM_CLOSE = $0010; {$EXTERNALSYM WM_QUERYENDSESSION} WM_QUERYENDSESSION = $0011; {$EXTERNALSYM WM_QUIT} WM_QUIT = $0012;