pondělí 13. ledna 2014

LiveBindings II - Wizard


LiveBindings Wizard


V minulém příspěvku jsme propojení objektů definovali za pomoci LiveBindings Designeru. Druhou možností, jak navrhovat LiveBindings propojení typu "QuickBindings" je použít "LiveBindings Wizard", který uživatele při realizaci typických požadavků vede krok za krokem. Dialog otevřeme kliknutím na ikonu v okně LiveBindings Designeru:

LiveBindings Wizard lze přidat do kontextové nabídky. Ve vlastnostech prostředí (nabídka "Tools => Options") vybereme "LiveBindings" a zaškrtneme volbu "Display LiveBindings Wizard in context menu".



Od tohoto okamžiku je již možné vyvolat LiveBindings Wizard z kontextové nabídky po klinutí pravým tlačítkem myši na formulář.


Následně si stačí v LiveBindings Wizard dialogu zvolit příslušný typ požadované vazby:


Link a control with field - Propojí zvolenou komponentu s určeným zdrojem dat. Umožňuje vybrat existující nebo definovat novou komponentu a připojit ji k určenému datovému zdroji. Pokud žádný datový zdroj není k dispozici, umožňuje jej definovat.
Link a grid with a data source - Propojí existující nově vytvořenou mřížku (TGrid, TStringGrid) s určeným zdrojem dat. Pokud žádný datový zdroj není k dispozici, umožňuje jej definovat.
Link a component property with a control - Umožňuje vybrat komponentu a její zvolenou vlastnost s jinou existující nebo nově definovanou komponentou.
Link a component property with a field - Propojí vybranou vlastnost zvolené komponenty s požadovaným datovým zdrojem. Pokud žádný datový zdroj není k dispozici, umožňuje jej definovat.
Create a data source - Umožňuje definovat nový datový zdroj (jeho typ, položky, případně doplňkové atributy jako jsou popisky nebo navigační tlačítka).



LiveBindings Wizard je kontextový, takže pokud klikneme pravým tlačítkem myši místo na formuláře na některou z existujících komponent, nabídne pouze relevantní možnosti (viz např. pro CheckBox).

Editace vizuálně navržených vazeb

Vlastnosti propojení definovaných s využitím průvodce "LiveBindings Wizard" nebo LiveBindings Designeru lze samozřejmě editovat v Inspektorovi Objektů. Stačí otevřít LiveBindings Designer a kliknout na příslušnou vazbu (symbol šipky mezi objekty). Možnost editace již definovaných vazeb nabízí také komponenta "BindingsList".


Komponenta BindingsList

Třetí možností jak definovat LiveBindings propojení mezi vlastnostmi komponent nebo komponentami a datovými zdroji je použití komponenty BindingsList (seznam propojení). BindingsList komponentu umístíme na formulář a poklepeme na ni levým tlačítkem myši. Otevře se dialog pro správu propojení. Nové propojení přidáme volbou "New Binding...":

Pokud již bylo pomocí Wizardu nebo LiveBindings Designeru vytvořeno alespoň jediné propojení, byla komponenta BindingsList přidána na formulář automaticky.


Na první pohled vidíme, že nabídka vazeb je rozsáhlejší. Kromě "QuickBindings" dialog nabízí ještě další kategorie, jako jsou "Bindigs Expressions", "Links" nebo "Lists".

Bindings Expressions
Všechna propojení jsou definována jednoduchými textovými výrazy (Bind Expressions), které při běhu aplikace průběžně vyhodnocuje LiveBindings Engine.


TBindExpression - Umožňuje definovat dvojici výrazů "Source Expression" a "Control Expression" mezi právě jednou vlastností zdrojového objektu a jednou vlastností cílového objektu.

  • Source Expression - Výraz, který zajišťuje vyhodnocení vstupu
  • Control Expression - Výraz, který zajišťuje vyhodnocení výstupu
TBindExprItems - Pro některá propojení (např. mezi datovou sadou a mřížkou) může být definováno více výrazů (Expressions Collection). V kolekci mohou být zastoupeny výrazy typu "Format", "Parse" a "Clear":

  • Format - Ovlivňuje tvar, v jakém bude informace předána ("zápis")
  • Parse - Ovlivňuje získání informace ze zdroje ("čtení")
  • Clear - Zajišťuje odstranění dříve předané informace ("čištění")
Links
TBindLink - Určen pro definování propojení umožňující předat hodnotu určené vlastnosti objektu zvolenému datovému zdroji.
TBindListLink - Specializovaný link pro objekty typu List.
TBindGridLink - Specializovaný link pro objekty typu Grid.
TBindPosition - Link umožňující synchronizaci pozice mezi objekty pracujícími s kolekcemi (např. ListBox a Grid).
TBindControlValue - Link umožňující synchronizaci hodnot při jejich změně ve zdrojovém objektu.

Lists
TBindList - Definuje jednosměrnou vazbu pro naplnění objektů jako ListBox, ComboBox a podobně.
TBindGridList - Definuje jednosměrnou vazbu pro naplnění objektů typu Grid.

Bindings Expressions, Links a Lists jsou otevřenější a poskytují více možností pro uživatelská nastavení než vizuální návrh prostřednictvím QuickBindings. Použití konverzí a metod v LiveBindings výrazech bude věnován příští příspěvek.


úterý 10. prosince 2013

LiveBindings I - Designer



Co jsou LiveBindings

Strategie multiplatformního vývoje si v nástrojích Delphi a C++ Builder vynutila mnohé inovace. Především je to nový aplikační rámec FireMonkey, který zajišťuje podporu různých operačních systémů. Aktuálně lze vyvíjet pro Windows 32 a 64 bit, MacOS X, iOS a Android. S přenositelností aplikací je spjata i technologie "LiveBindings". Jedná se o mechanismus,
který umožňuje vzájemně propojovat libovolné zdroje dat, prvky uživatelského rozhraní nebo grafické objekty. Nahrazuje tak zasílání zpráv mezi objekty, které bylo dosud řešeno prostředky operačního systému a tudíž platformně specifické. To je zvláště důležité z pohledu databázových aplikací, protože LiveBindings umožňují, aby libovolná FireMonkey komponenta mohla pracovat jako specializované "Data-Aware" komponenty ve VCL. Zároveň přináší mnohem obecnější a otevřenější řešení, které umožňuje ošetřit komunikaci mezi objekty i v situacích, kdy předem neznáme typ či rozsah předávaných hodnot. Díky podpoře vizuálního návrhu se rovněž jedná o velmi efektivní způsob vývoje.



Přesto, že LiveBindings byly představeny v souvislosti s uvedením knihovny FireMonkey, je jejich použití možné i v rámci VCL.

Díky LiveBindings může každý objekt vystavit (publikovat) své vlastnosti ve formě textového výrazu. Zároveň se stejným způsobem může přihlásit k odběru vlastností publikovaných jinými objekty. LiveBindings udržují seznam všech definovaných výrazů (komponenta "BindingsList"), zajišťují jejich vyhodnocování a zpracování. LiveBindings rovněž sledují změny vlastností u registrovaných objektů a upozorňují na ně objekty, které si je vyžádaly.


QuickBindings

Ve většině případů lze komunikaci mezi objekty navrhovat vizuálně za pomoci vestavěného návrháře "LiveBindings Designer". Okno návrháře můžeme otevřít z hlavní nabídky (View => LiveBindings Designer), nebo kliknutím pravým tlačítkem myši na objekt, jehož vlastnost chceme pro definici vazby použít a volbou "Bind Visually...".




LiveBindings Designer

V prostředí LiveBindings Designeru jsou objekty a vazby mezi nimi znázorněny ve formě diagramu. Používány jsou následující symboly a terminologie:



Source - Objekt (zdrojový), který informaci poskytuje
Control - Objekt (řízený), který informaci přijímá a zpracovává
Link - Vazba mezi objekty, její definice. Link je orientovaný a určuje směr komunikace, tedy, který objekt informaci publikuje (je "source") a který je jejím příjemcem ("control"):

  • DataToControl - Vazba "Source -> Control" (např. zobrazení dat v Editu)
  • ControlToData - Vazba "Control -> Source" (např. odeslání dat z Editu)
  • Bidirectional - Obousměrná vazba, která reaguje na změnu kteréhokoliv ze vzájemně provázaných prvků (např. TrackBar a Edit) 
QuickBindings až na výjimky nevyžadují žádné kódování. Na základě diagramu jsou vygenerovány patřičné vazby a jejich ošetření. Po startu aplikace "Control" objekt automaticky přebírá a zpracovává vlastnost publikovanou "Source" objektem.


Jeden objekt může samozřejmě předávat informaci více objektům, nebo naopak jeden objekt může být příjemcem informací od více objektů.


Návrh vazeb mezi objekty provádíme tažením myši od zvolené vlastnosti jednoho objektu ke zvolené vlastnosti objektu druhého. Z důvodu přehlednosti jsou u jednotlivých objektů zobrazeny pouze nejčastěji používané vlastnosti. Pokud však klikneme myší na pravý spodní roh označený třemi tečkami, otevře se dialog pro přidání dalších dostupných vlastností. V dialogu lze vyhledávat podle názvu vlastnosti. U komplikovanějších objektů, kde nemusí být seznam vlastností úplný, můžeme chybějící vlastnost jednoduše doplnit do políčka u spodního okraje dialogu a přidat jej do seznamu za pomoci tlačítka "Add".



Objekty jsou zpravidla v LiveBindings Designeru zobrazovány automaticky. Existují však i výjimky. V takovém případě si lze jejich zobrazení vynutit v okně "Inspektor Objektů" nastavením vlastnosti "Visible Element" na True.



Použití LiveBindings přináší kromě zrychlení návrhu aplikace také její lepší "čitelnost". Běžná propojení se obejdou zcela bez kódování a navíc jsou přehledně zdokumentována ve formě diagramu.


LiveBindings diagramy lze ukládat ve zvoleném grafickém formátu. Stačí kliknout pravým tlačítkem myši kdekoliv na pracovní plochu LiveBindings Designeru a vybrat "Save to Image".


pátek 22. listopadu 2013

Android Emulátor II

Přesun Emulátoru na jiný stroj

Jak jsem již zmiňoval ve svém minulém příspěvku, Android emulátor nesmí být provozován ve virtualizovaném prostředí. To že se Android Emulátor nesnáší s virtuálními stroji ale neznamená, že musíte nutně reinstalovat Delphi a všechny používané komponenty. Na "fyzický" stroj stačí přesunout pouze SDK Manager s Emulátorem a následně zprovoznit vzdálené ladění.


Co je PuTTY

PuTTY je nenáročný klient, který umožňuje připojit se ke vzdálenému počítači a předávat mu příkazy ke zpracování. Komunikace může probíhat prostřednictvím protokolů Telnet (Telecommunication Network), RLogin (Remote Login) nebo SSH(Secure Shell). Protože Delphi využívá toho, že Android simulátor lze plnohodnotně ovládat z příkazové řádky, můžeme za pomoci PuTTY "přesměrovat" tyto příkazy mimo virtuální stroj. Následující návod je převzat z
Delphi.org, kde byl ovšem jako vzdálený stroj použit Mac.



1)Konfigurace SSH Host

Na vzdálený stroj nainstalujte SSH server. Některé zdroje doporučují neinstalovat FreeSSHd jako službu, ale spouštět jej jako aplikaci. Po instalaci a spuštění se FreeSSHd zobrazí v oznamovací oblasti hlavního panelu:



Kliknutím pravým tlačítkem myši na ikonu FreeSSHd otevřeme dialog umožňující upravit jednotlivá nastavení. Nejprve v záložce "Tunneling" povolíme přesměrování (forwarding) lokálních portů:



Dále v záložce "Users" přidáme uživatelský účet, kterým se budeme k počítači přihlašovat:



Pokud byla instalace úspěšná, v záložce "Server status" by mělo být u SSH serveru zobrazeno zelené zatržení a informace, že SSH server běží:


2)Instalace Android SDK na vzdálený stroj

Stáhněte Android SDK a rozbalte jej do zvoleného adresáře. Nakonfigurujte a spusťte AVD (viz Anroid Emulátor I).


3)Instalace a konfigurace PuTTY

Nyní stáhneme aplikaci PuTTY. Protože se jedná o přímo spustitelný soubor, není jej třeba instalovat. Po spuštění je třeba provést konfiguraci připojení. V sekci "Session" vyplníme jméno nebo IP adresu vzdáleného stroje. Port pro SSH je typicky 22, nezapomeňte si ale ověřit, zda je zvolený port povolen v nastavení Vašeho firewallu.



V sekci "SSH ->Tunnels" je třeba nastavit přesměrování portů 5554 a 5555, které používá Android emulátor, z lokálního na vzdálený počítač:



Tato nastavení by měla být dostatečná a je tedy možné PuTTY spustit kliknutím na tlačítko "Open". Otevře se příkazový řádek s požadavkem na zadání uživatelského jména a hesla (viz nastavení FreeSSHd):



Po úspěšném přihlášení můžeme PuTTY minimalizovat. Okno však nezavírejte, připojení je aktivní jen po dobu, kdy je PuTTY spuštěné.


4)Otestování přístupu z Delphi

Na počítači (v mém případě ve virtuálním prostředí VMWare) spustíme Delphi a otevřeme nový nebo existující Fire Monkey Mobile Application projekt. Dále otevřeme příkazový řádek (CMD) a spustíme následující příkazy (viz ADB dokumentace):
  • adb kill-server
  • adb devices
Tip: ADB (Android Debug Bridge) se standardně nachází v adresáři "C:\Users\Public\Documents\RADStudio\12.0\PlatformSDKs\adt-bundle-windows-x86-20130522\sdk\platform-tools". CMD je tak nutné spustit z tohoto umístění, nebo uvedenou cestu přidat do PATH.



Nyní v Delphi v okně "Project Manager" klikneme pravým tlačítkem myši na uzel "Target" a aktualizujeme jej pomocí volby "Refresh". Pokud se vše podařilo, nabídka se rozšíří o zařízení emulované na vzdáleném stroji:



Z pohledu Delphi je práce se "vzdáleným" emulátorem zcela totožná, jako kdyby běžel na stejném stroji, jako vlastní vývojové prostředí.

sobota 9. listopadu 2013

Android Emulátor I.


Android Virtual Device

Přes maximální snahu společnosti Embarcadero, aby byli programátoři a vývojáři co nejméně zatěžováni odlišnostmi jednotlivých cílových platforem, je přece jen vývoj pro mobilní zařízení v řadě ohledů specifický. Především zde není možné vyvíjenou aplikaci jednoduše spouštět a ladit na stejném stroji, na kterém je vytvářena. Pro účely ladění je potřeba použít buď fyzické zařízení nebo jej simulovat/emulovat. Při vývoji aplikací pro iOS je využíván simulátor, pro Android pak emulátor. Zatímco simulátor je standardní Wintel aplikace, Android emulátor skutečně "emuluje" procesor ARM.

Emulátor PRO a PROTI

Pro
  • Vyzkoušení reálného vzhledu aplikace na zařízeních s různou uhlopříčkou a rozlišením
Proti
  • V některých případech komplikovaná konfigurace
  • Emulátor je "opravdu, ale opravdu" velmi pomalý


Když emulátor nefunguje

Mnoho vývojářů má problém se zprovozněním emulátoru. I když lze emulátor spustit, po nasazení aplikace zůstane obrazovka emulátoru černá, aplikace se nezobrazí vůbec, nebo se po často velmi dlouhé době zobrazí hlášení "Application isn't responding". Příčin, proč není emulátor funkční, může být celá řada. Zde jsou ty nejčastější:
  • Emulátor není správně nakonfigurován
  • Emulátor je instalován ve virtuálním prostředí (VMWare, VirtualPC,…)
  • V počítači není vhodná grafická karta nebo ovladače


Konfigurace Emulátoru

Spolu s Delphi XE5 instalovaný Android SDK již obsahuje nakonfigurované AVD (Android Virtual Device) pojmenované "rsex5_android". Pro vytvoření vlastní konfigurace je třeba otevřít Android SDK Manager (např. prostřednictvím zástupce "Android Tools" z nabídky "Start").




V aplikaci "Android SDK Manager" následně otevřeme správce virtuálních zařízení (nabídka "Tools->Manage AVDs…“).




AVD Manager slouží ke správě a přímému spouštění existujících virtuálních zařízení. U každého ze zařízení je také ikona, která indikuje jeho stav.



Pro vytvoření nového zařízení je vhodné nepoužít přímo tlačítko "New…", ale přepnout se do záložky "Device Definitions". Zde naleznete připravené definice nejběžnějších zařízení, ale není problém vytvořit definici vlastní.




Při definování vlastního zařízení je třeba zadat odpovídající fyzické parametry jako je úhlopříčka, rozlišení nebo paměť. Dále lze určit, které senzory a další hardwarové prostředky má zařízení k dispozici a mají být emulovány.



Po zadání všech požadovaných hodnot je zpřístupněno tlačítko "Create Device". To otevře dialog, kde je možné ještě upřesnit některá nastavení.



Z pohledu vývojových nástrojů Embarcadero je zásadní nastavení následujících parametrů:

Target - Určuje verzi Android SDK Platform API, s kterým má být emulované zařízení kompatibilní. 
CPU/ABI - zde lze vybrat platformu, která má být emulována. Možnosti jsou dvě a to buď ARM nebo Intel Atom. V našem případě je třeba zvolit emulaci procesoru ARM.
Emulation Options - Pro ladění aplikací vytvořených v Delphi a v budoucnu také v C++ Builderu musí být zapnuta HW akcelerace (volba "Use Host GPU"). Tento požadavek vyplývá z nároků aplikačního rámce FireMonkey. Grafické operace tak nebude zpracovávat emulátor, ale budou přesměrovány na GPU grafické karty. Zároveň nelze použít volbu "Snapshot", která ukládá obsah emulované RAM a následně ji používá místo "bootování" Androidu pro rychlejší start emulátoru. Podmínkou pro použití HW akcelerace jsou:
  • Android SDK Tools, Revize 17 nebo vyšší
  • Android SDK Platform API 15, Revize 3 nebo vyšší
  • Grafická karta s podporou OpenGL
Provedená nastavení nakonec potvrdíme tlačítkem "OK". Tím je virtuální zařízení připraveno k použití. Během startu vypisuje emulátor informace o průběhu inicializace jednotlivých modulů. V případě, že bude obsahovat hlášení "Could not initialize OpenglES emulation", znamená to, že s nejvyšší pravděpodobností nemáte instalovanou vhodnou kartu nebo ovladače k ní. Stejné hlášení obdržíte při spuštění emulátoru ve virtuálním stroji.



V příštím příspěvku si popíšeme, jak zpřístupnit emulátor z vývojového prostředí instalovaného ve virtuálním stroji.

sobota 12. října 2013

Vývoj pro Android III.


Nastavení vývojového prostředí

1) Instalace a konfigurace SDK
Během instalace je standardně instalován i Android Software Developer Kit, aktuálně API verze 17. V případě, že už Android SDK máte instalovaný jako součást jiného softwarového balíku, je výrazně doporučeno používat pro vývoj v Delphi pouze SDK, které bylo dodáno spolu s prostředím. Delphi využívá Android SDK a v něm obsažené nástroje při sestavení aplikace a i drobná chyba v konfiguraci či nastavení cest může způsobit zbytečné problémy. Jistotu, že používáte správnou instanci, Vám zajistí, použijete-li zástupce "Android Tools" z nabídky Start.




Zástupce "Android Tools" spustí příslušný Android SDK Manažer, s jehož pomocí můžete následně SDK aktualizovat nebo rozšiřovat o podporu dalších verzí API.


O tom, s jakou verzí SDK bude Delphi pracovat, rozhoduje nastavení takzvaného profilu. Změnit jeho nastavení, nebo přidat nový profil můžeme v okně "Project Manager". V seznamu dostupných cílových platforem označíme platformu "Android" a klikneme na ni pravým tlačítkem myši. V následně zobrazené nabídce pak klikneme na volbu "Edit SDK...". Alternativně můžeme použít hlavní nabídku Delphi "Tools => Options => Environment Options => SDK Manager".

Dialog zobrazí aktuálně nastavené cesty k jednotlivým součástem Android SDK. Funkční konfiguraci je vhodné uložit do souboru (volba "Export"), a ten v případě problémů použít pro obnovu nastavení (volba "Import"). O tom, že se vyplatí si konfiguraci uložit jsem se bohužel už sám přesvědčil.

Tlačítkem "Add" můžeme dle potřeby přidávat profily pro starší nebo novější verze API.



Po nastavení cest se přidá nový profil do nabídky. Profilů může být definováno více, v jednu chvíli však může být pouze jediný aktivní.



2) Instalace USB ovladače
Aby bylo možné ladit aplikace přímo na zvoleném Android zařízení, musí být telefon nebo tablet registrován operačním systémem Windows a připojen za pomoci USB kabelu. Registraci zařízení je většině případů třeba provést manuálně. V nabídce "Start" vyhledáme "Správce zařízení", nebo jej spustíme přes "Ovládací panely" (Start => Ovládací panely => Hardware a zvuk => Správce zařízení".




Pozor, v systému bude pravděpodobně Váš tablet nebo telefon uveden dvakrát. Jednou jako "Přenosné zařízení" a jednou jako nerozpoznané "Další zařízení" nebo "Android device". Vybereme je tedy zobrazeném seznamu a klikneme na něj pravým tlačítkem myši. Z kontextové nabídky vybereme volbu "Aktualizovat software ovladače" a vyhledáme příslušný .inf soubor.



Protože Windows zpravidla nezvládnou mobilnímu zařízení přiřadit odpovídající ovladač, je třeba jej vyhledat. Generický ovladač od společnosti Google je možné stáhnout přes Android SDK Manažer.


Následně jej najdete v adresáři SDK, typické umístění ovladače je "C:\Users\Public\Documents\RADStudio\12.0\PlatformSDKs\adt-bundle-windows-x86-20130522\sdk\extras\google\usb_driver.inf". Možné je samozřejmě i použití ovladače od dodavatele mobilního zařízení. Ty lze většinou najít na stránkách technické podpory daného výrobce. V některých případech lze ovladač získat pouze jako součást instalace doprovodných aplikací, jako jsou například Samsung Kies nebo HTC Sync Manager. Po úspěšné aktualizaci by se mělo Vaše zařízení objevit v nabídce cílových platforem v okně "Project Manager".



Tímto krokem je jak zařízení, tak prostředí připraveno pro vývoj a testování Android aplikací.