RAD Studio XE3 - Visual LiveBindings - základy

vložil Radek Červinka 22. listopadu 2012 23:41

RAD Studio XE3 přidává novou vlastnost nazvanou Visual LiveBindings. Podle mne se jedná o nejzásadnější rozšíření od dob Delphi 1. I proto je to těžké vysvětlovat, protože se jedná o úplně novou oblast a musím od základů, navíc mnohem hůře se to popisuje než používá. Použití je jak pro VCL, tak pro FMX.

Visual LiveBindings

Návrhář je dostupný přes menu View | LiveBindings Designer (nebo popmenu a Bind Visually – lze v options vypnout)

Visual LiveBindingsVisual LiveBindings

LiveBindings Designer (LBD) funguje jednak s novými komponentami, druhak jsou některé staré komponenty rozšířeny o jeho podporu. LBD rozšiřuje myšlenky podpory pro LB z XE2 tak, že nemusíte psát skoro žádný kód a navíc to funguje i pro VCL. V XE2 byla podpora pro "managed expressions" - podpora zůstává, ale nově jsou komponenty rozšířeny o vzor “Observers to listen to events”.

S "managed expressions" system detekoval změny a předal je dál přes různé "managed expressions". Nové LiveBindings jednoduše naslouchají vstupu od uživatele a via rozšíření Observer, které je implementováno na různých komponentách, je provedena reakce. Observer v podstatě nahrazuje události (např. OnClick, OnChange atd).

Osobně si myslím, že implementace v XE2 byla šita horkou jehlou a nejlepší je ji nepoužívat. Je to rozdíl jako tahat komponentu v designeru nebo ji vytvářet za běhu.  

Visual LiveBindings prakticky

Vložte na formulář CheckBox. V LBD se ukáže jako blok s názvem a property Checked, tj. property, která je primární pro propojení.

Visual LiveBindings

Nyní přidáme GroupBox. GroupBox má take property, ale není určen k vstupu od uživatele, takže nelze propojit ve směru GroupBox a CheckBox, ale naopak to jde (Caption může zobrazovat výsledek). Takže nakreslíme propojovací čáru mezi komponentami. Tímto máme vytvořeno naše první LiveBinding.

Visual LiveBindings

Pokud nyní spustíme aplikaci, tak při klikání na CheckBox se mění Caption GroupBoxu na True nebo False.

Mimochodem natažením linku se automaticky přidala nevizuální komponenta BindingsList. Poklepáním na tuto komponentu uvidíte seznam propojení.

Visual LiveBindings

Obecně se o tento seznam nemusíte starat, ale je vhodné chápat jak to celé funguje. Při použití LBD je každá linka reprezentována v programu jednou komponentou, v našem případě je to instance LinkControlToProperty, na kterou můžete klepnout a tak ji zobrazit v Object Inspectoru.

Visual LiveBindings

Tím se dostáváme k tomu, co máme v základu za komponenty (stiskem INS, nebo ikonu v binding editor dostanete nabídku):

Visual LiveBindings

Visual LBD používá komponenty ze sekce Quick Bindings, ale dokáže zobrazit (ne vytvářet) i komponenty z XE2.

V našem příkladu máme Control, Component a ComponentProperty =Caption. Změnou ComponentProperty na Visible (výběr z dostupných x property) změníme chování a checkbox bude ovládat viditelnost.

Postoupíme dále. Přidejme na formulář TListBox, klasickou starou dobrou old-school komponentu dostupnou od Delphi 1. Do property Items dáme několik položek a pravá myš nám umožní Bind Visually. Námi hledaná property je SelectedItem (co dělá je jasné).

Visual LiveBindings

Takže propojíme GroupBox1.Caption a ListBox1.SelectedValue. Někde v hlubinách má Observer pro TListBox, že pro vazbu SelectedValue a string vrací text vybrané položky (co jiného taky že?). Nyní se po spuštění programu bude měnit Caption komponenty GroupBox dle aktuálně položky ListBoxu.

Upozorním na zajímavou věc. Pokud manuálně nastavíme Caption groupboxu na některou z položek Listboxu a v designmode u linku vypneme a zapneme property AutoActivate (tj. True-False-True), tak se v ListBoxu vybere položka, která odpovídá Caption GroupBoxu (ListBox se snaží o sync). To mimochodem znamená, že při startu aplikace se VB snaží o synchronizaci (i když normálně je link jednosměrný, tj. ListBox > Caption).

Samozřejmě, že jde nastavovat i jiné property (a to i zároveň – prostě provedeme více propojení) – jejich seznam je dostupný při kliknutí na … ve VLB, jako příklad můžu uvést With, ale i mnohem složitější property.

Samozřejmě pokud se snažíte přiřadit textovou položku do integer property tak dostanete vyjímku, protože program neví jak provést konverzi. Ve skutečnosti je zabudováno několik konvertorů dat (např. string to int), ale pokud to nestačí, můžete použít Expressions. Vyberte link (SelectedItem to Caption) a v ObjectInspectoru úplně dole je možnost Expressions…

Visual LiveBindings

Visual LiveBindings

Toto je předgenerovaný výraz z Quick Binding.

Všimněte si, že vlevo je vybraná volba Format. Tento výraz je použit při přiřazení z Control > Source (ListBox na Caption).

Pokud vyberete Parse tak se jedná o opačný směr.

Clear by mělo být použito při odpojení.

Pokračování příště


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: , , ,

Novinky v Delphi

Komentáře

23.11.2012 10:53:14 #

Petr Kohut

Mohl by mi někdo otevřít oči nějakým příkladem, který tahle věc zjednoduší nebo vůbec umožní?

Ty LiveBindings mi přijdou jako velká nechutnost. Můžou být dobré pro neprogramátora, který chce rychle se zákazníkem naprototypovat aplikaci, ale celkově se mi nelíbí. Zaprvé je to část kódu která je schovaná jinde než v PAS souboru a pak se člověk může divit. Zadruhé to hrubě využívá RTTI, což jsou teoreticky zbytečná data přikompilovaná k aplikaci (ano, je mi jasné že i DFM je využívají) , aby se v runtime řešily věci, které se dají vyřešit v designtime a následně je může zkontrolovat kompilátor. Tahle věc se mi moc nepozdává.

Petr Kohut

23.11.2012 12:34:41 #

Radekc

Je to stejné jako používání komponent, taky se dam děje spousta věci (streamování z DFM)  a přesně stejné námitky slyším od C programátorů - já si to raději vytvořím v kódu.

Další příklady budou následovat.

Radekc

23.11.2012 19:44:16 #

oxo

Mne se to docela i libi, zatim jsem to teda nepouzil, ale nekdy je otrava honit kazdou kravinku pres eventy. Ovsem za predpokladu, ze se ty LiveBindings nebudou ztracet. Mne se pomerne casto stava pri pouzivani TFrame, ze se mi do eventu vlozeneho TFrame samo priradi nil a pak uzivatele hlasi: najednou prestalo fungovat tlacitko. Clovek pak musi do DFM a linku s OnClick = nil rucne smazat, aby se tam vratila puvodni metoda :) A taky to maze nastavene properties z modulu, ktere jsem explicitne neotevrel v delphi, ale v projektu jsou (ImageListy a podobne).

Takze ve zkratce: vizualni kravinky setri cas a jsou pohodlne, ale clovek nemuze ocekavat 100% stabilitu. Kdyz si to napisu v kodu, tak to v nem je a nic mi to nerozhazi.

oxo

24.11.2012 2:57:35 #

Igor Gottwald

Zdravím, já osobně se k LiveBindings zatím také stavím chladně a raději je nepoužívám, byť osobně se mi myšlenka samotná líbí. Já se děsím toho, že tak jako ve verzi XE2 to bylo ušito horkou jehlou, čeká nás ještě jedna nebo dvě verze, kdy tato technologie zažije hlubší předělávku a prostě dříve použitá práce nebude fungovat nebo se bude chovat nečekaně. A pak bude noční můrou to opravovat. Radkovo srovnání s komponentami není úplně na místě, jelikož systém komponent, resp. jejich vizuální část, implementace a propojení do kódu, byly navrženy s rozmyslem a na nich byl vybudován celý systém, který se (až na drobné korekce) nezměnil od první verze Delphi. LiveBindings je technologie nová, která byla do systému zapracována dost překotně (jako mnoho jiných) a zjevně na začátku nebyla dostatečně promyšlená. A tak jsem sám zvědavý, co nás v tomto směru čeká za rok.
Dodnes bývalému Borlandu nemohu zapomenout kapitolu s ECO (Enterprise Core Objects). To byla taky taková technologie velice vynášená do nebes, všechno se od té doby mělo dělat už jen přes modely a business logika se měla oddělit do aplikace a skrýt právě do ECO. Alespoň podle Borlandu a následně CodeGear. Kdo v tom napsal nějaký větší projekt, tak podle mě dodnes dělá na Delphi 2006. A pak ECO v tichosti vypustili a bylo "po ptákách". Naštěstí jsem si s tím jen hrál, ale neodvážil jsem se to nasadit do žádného projektu. Dobře jsem udělal.
Teď tu máme opět spoustu nových technologií. Některé se udrží a jiné zaniknou. Ač si Delphi VCL samotné skvěle vede s kompatibilitou napříč verzemi, to samé se nedá říct o zaváděných novinkách. Tou hlavní je dnes rozhodně FireMonkey a osobně si nemyslím, že by to byla slepá ulička. Naopak se domnívám, že to je cesta správným směrem, evoluce, a v příští verzi už bude technologie zralá pro profesionální nasazení. V zásadě je asi hotová už teď. LiveBindigns vznikly hlavně kvůli FireMonkey, aby bylo možné zajistit větší interaktivitu bez nutnosti programování. Portování do VCL podle mě přišlo autorům jako hodně muziky za málo peněz a tak to udělali. Ale přesně jak píše "oxo", já tomu také nevěřím. Těch špatných příkladů bylo za těch 11 let až moc...

Igor Gottwald

26.11.2012 1:19:13 #

Radekc

Asi máte trochu pravdu, člověk musí být opatrný. Mně se ta myšlenka VLB líbí, jen musím osobně najít vhodný řez, co je vhodné pomocí toho dělat, a co ne.

Na druhou stranu zkuste pochopit i mne. V XE2 se mi to moc nezdálo, proto jsem to ani skoro nepopisoval. V XE3 mi přijde, že je to vytvořeno skoro tím správným "Delphi" stylem a proto se tím zabývám. Zda to budete používat nechám na Vás - ale za mne jsem chtěl, aby se alespoň vědělo, že něco takového vůbec existuje a jak je to myšleno.

Radekc

26.11.2012 14:52:51 #

Tomas Hruska

Zdravím, úplný souhlas - v XE2 skoro "Technology preview", v XE3 hodně zajímavý nástroj. Kvůli školením procházím videa z letošního CodeRage (Youtube, hledejte CodeRage 7), umí to fakt hodně. Nicméně je třeba si to dopředu promyslet, aby člověk nedopadl tak, že půl logiky je v LiveBindings a půl v obsluze událostí :) a teď to hledejte ... Jako další problematický bod vidím debugging, tam s LiveBindings zatím moc kouzel nejde ...

Tomas Hruska

27.11.2012 12:54:57 #

Petr Kohut

Dobrý den,
abych také nebyl špatně pochopen: nikoho nekritizuji, pouze se snažím rozvířit debatu, abych se o této technologii dozvěděl něco nového a přišel na to, kde by bylo vhodné ji použít (a zda vůbec). Články na komentáře na toto téma vítám. Dovedu si představit, že díky této technologii bude samotný kód čistší a přehlednější (zbaven obsluhy jednoduchých událostí).

Petr Kohut

3.12.2012 16:13:08 #

Daniel Andrascik

Suhlasim a pridavam sa skor k negativnym ohlasom. Najlepsie to tu popisal Oxo. "Kdyz si to napisu v kodu, tak to v nem je a nic mi to nerozhazi." Ja osobne nezriedka vytvaram aj niektore (nie vsetky) VCL komponenty az za behu aplikacie. Proste je to napisane, da sa to debugovat, bezpecnejsie sa to kopiruje medzi roznymi projektami, vpripade ze nieco chyba, tak kompilator okamzite krici ze je nieco zle. Ked skopirujem BindingList aj z niektorymi komponentami a niektore vynecham, na niektore zabudnem, tak kto vie co to urobi. Asi to len v tichosti pripadne z nejakym upozornenim tie linky vymaze a ja to zistim asi az za behu aplikacie ked to budem skusat. Co je psano, to je dano... Nemam rad kadejake rozklikavanie komplikovanych okien a sprievodcov. Clovek to aj urobi, pohra sa s tym. No o pol roka uz uplne zabudne co tam vsetko naklikal a musi rozklikavat zase celu furu okien. Ked to ma napisane, prebehne okom dva tri odstavce a vidi hned o com to je nez aby klikal mysou hore dole...

Daniel Andrascik

3.12.2012 22:00:10 #

Radekc

Ale o tom je celé Delphi. Já mám přece možnost volby. Mohu bouchat komponenty na formulář, ale taky je můžu vytvářet za běhu. Můžu si hrát s RTTI nebo se rýpat v assembleru. Mám tu možnost a svobodu volby. A to se mi na Delphi líbí - dává mi volnost. Kdo chce může to použít, kdo nechce - může používat DB komponenty nebo si to dělat v kódu.

Radekc

5.12.2012 15:45:20 #

Daniel Andrascik

tak to plne suhlasim :)

Daniel Andrascik

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS