Úvod do FireMonkey

vložil Radek Červinka 6. září 2011 23:34

FireMonkey je nová multiplatformní knihovna komponent. Zkuste ji považovat jako alternativu k VCL, přičemž VCL bude i nadále podporována a rozvíjena. VCL je ale striktně vázána na Windows, naopak FireMonkey momentálně existuje pro Windows, Mac OSX a iOS, přičemž je deklarována budoucí podpora pro Linux a Android (a další mobilní platformy).

Na rozdíl od CLX, která byla postavena na QT (která je díky situaci momentálního vlastníka Nokia na konci života), je FireMonkey nativně vytvořena v Object Pascalu a jen pro přístup k HW je používána příslušná knihovna - na Windows GDI+ nebo Direct2D, na MAC to je OpenGL, pravděpodobně pro Linux také, pro iOS je to OpenGL_ES, Android asi také. Vše je v podstatě "CustomDraw" a jen např. práce s okny, myší je přes instanci Platform předávána OS. Tzn. že cca 90% kódu je nezávislé na OS (protože je to CustomDraw a vše je kresleno HW).

Nový projekt

Pro upřesnění - HD je 2D aplikace.

Základem je styl

V porovnání FireMonkey a VCL je patrno, že VCL je komplexnější, ale už během životního cyklu XE2 je očekáváno několik rozšíření. Michael Swindell napsal, že první dávka rozšíření je plánována na konec září.

Na druhou stranu, FireMonkey je úplně jinak postavena a nic tam není fixní. To mimochodem znamená, že např. rozdíl mezi TButton a TCheckBox je jen v grafické reprezentaci - obojí je kresleno, ale každý jinak. Samozřejmě styl jak to bude kresleno lze změnit.

Můžete např. TCheckBox vykreslovat jako tlačítko nebo třeba jako cokoliv jiného (přiznám se, že je pro mne problém myslet tímto způsobem, ale snažím se) - vše je popsáno vektorově. Vše je samozřejmě plně dynamické, tj. uvedený checkbox může být checkboxem do doby než na něj najedete myší, pak jen změníte "Style". Každý control má property StyleLookup, která slouží k přeplácnutí normálního vzhledu. "Normální vzhled" je samozřejmě různý pro různé OS.

PropertyProperty

Všimněte si kromě jiného výrazného rozšíření Align, je to ten rozbalený combobox na obrázku.

Samozřejmě, nejde jen o změnu vzhledu aplikace. Styly slouží k mnohem zásadnějším věcem. Mějme následující definici položky pro TListBox. Styly se definují v komponentě TStyleBook.

Položka

V designeru lze definovat rozpad stromu uvedené položky (CustomItem). Všimněte si vybrané položky - je to checkbox se speciálním style. Lze definovat styl per control, tj. TCheckBox může vypadat normálně, ale hned vedlejší úplně jinak.

Položka

Definice uvedeného stylu pro checkbox.

CheckBox

A jak to bude vypadat za běhu?

Za běhu

Vytvoření jedné položky.

    1procedure TfrmCustomList.Button2Click(Sender: TObject);
    2var
    3  Item: TListBoxItem;
    4begin
    5  // create custom item
    6  Item := TListBoxItem.Create(nil);
    7  Item.Parent := ListBox1;
    8  // this code set event - when we need to setup item
    9  Item.OnApplyStyleLookup := DoApplyStyleLookup;
   10  // this set our style to new item
   11  Item.StyleLookup := 'CustomItem';
   12end;
   13
   14procedure TfrmCustomList.DoApplyStyleLookup(Sender: TObject);
   15var
   16  B: TBitmap;
   17  Item: TListboxItem;
   18begin
   19  Item := TListBoxItem(Sender);
   20  // create thumbnail
   21  B := TBitmap.Create(10 + random(50), 10 + random(50));
   22  B.Clear($FF000000 or TAlphaColor(random($FFFFFF)));
   23  // use this to set our child controls value - this code use BindingName in style to search
   24  Item.Binding['image'] := ObjectToVariant(B); // set thumbnail
   25  Item.Binding['text'] := 'item ' + IntToStr(Item.Index); // set filename
   26  Item.Binding['resolution'] := IntToStr(B.Width) + 'x' + IntToStr(B.Height) + ' px'; // set size
   27  Item.Binding['depth'] := '32 bit';
   28  Item.Binding['visible'] := true; // set Checkbox value
   29  Item.Binding['visible'] := EventToVariant(DoVisibleChange); // set OnChange value
   30  Item.Binding['info'] := EventToVariant(DoInfoClick); // set OnClick value
   31  // free thumbnail
   32  B.Free;
   33end;
   34
   35procedure TfrmCustomList.DoInfoClick(Sender: TObject);
   36begin
   37  InfoLabel.Text := 'Info Button click on ' + IntToStr(ListBox1.ItemIndex) + ' listbox item';
   38end;
   39
   40procedure TfrmCustomList.DoVisibleChange(Sender: TObject);
   41begin
   42  InfoLabel.Text := 'Checkbox changed ' + IntToStr(ListBox1.ItemIndex) + ' listbox item to ' + BoolToStr(Listbox1.Selected.Binding['visible'], true);
   43end;

Skládání komponent

Díky tomu jak je FireMonkey koncipován, lze úplně jednoduše skládat komponenty na formuláři.

Tlačítko

Tlačítko

Zde je v jednom tlačítku druhé tlačítko a navíc checkbox. Tj. uživatel může kliknout na vnější tlačítko nebo vnitřní (je to příklad), při nastavení pozice vnějšího tlačítka se upravuje pozice vnitřního (jinak řečeno vnitřní komponenty jsou relativně k pozici vnější). Úplně stejně to funguje i pro jiné komponenty.

Něco proměnných

Ve FMX.Types je definováno

  // On low-end hardware or mobile bitmap effects are slowly
  GlobalDisableFocusEffect: Boolean = False;
  // Use Direct2D in Windows Vista or Windows 7 by default
  GlobalUseDirect2D: Boolean = True;
  // Use Direct2D in Windows Vista or Windows 7 in software mode
  GlobalUseDirect2DSoftware: Boolean = False;
  // Use HW accelerated effect if possible
  GlobalUseHWEffects: Boolean = True;

Spolupráce VCL a FMX

Není oficiálně doporučováno, ale není problém zobrazit FMX dialog z VCL aplikace. Opačně to jde také, ale nedělal bych to.

Poslední poznámka: pozor na rozdíl velikosti EXE u debug verze (10MB) a release (3MB).

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


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

Tagy: , ,

Komponenty

Komentáře

7.9.2011 10:01:53 #

filo

>>> Všimněte si kromě jiného výrazného rozšíření Align, je to ten rozbalený combobox na obrázku.
Jestli mělo jít o obrázek výše nad tímto textem, tak tam žádný rozbalený combobox pro Align nevidím ...

Jinak díky za článek, vypadá to opravdu zajímavě.

filo

7.9.2011 10:30:50 #

Radekc

Ale je tam, jen jde blbě vidět, levý obrázek, pravý sloupec. Právě je vybráno (focused) alNone, což je asi 10 položka. Ono se to kryje s object inspectorem.Je to už bohužel tak.

Radekc

7.9.2011 11:16:24 #

Jaroslav Dakš

Moc se mi nezdá, že by Qt bylo na konci života. To by totiž poslalo do háje celej KDE desktop, ale o tom snad zatím nejsou žádný zprávy.

Jaroslav Dakš

7.9.2011 11:34:47 #

Radekc

Qt nyní patří Nokii, to že to používá KDE nic neznamená. Qt bylo koupeno k vuli Symbianu. Nokia Symbian odpískala. Qt je tím prakticky odsouzeno k pomalému umírání.

Sice ho nějak možná otevře (nebo otevřela) ale to nic nemění na tom, že hlavní hybnou silou byl TrollTech (nebo tak nějak), který byl koupen Nokií. A v případě ukončení Symbianu nemá žádný důvod dál ten framework podporovat. No uvidíme. Já to podle indicií odhaduju tak, jak jsem napsal.

Doporučuji přečíst související článek pana Zandla:
http://www.lupa.cz/clanky/desivy-pripad-padu-spolecnosti-nokia-rukou-exmicrosoftiho-manazera/

Radekc

7.9.2011 13:59:08 #

mitzix

Co je ale obludne, ze i jednoducha aplikace zalozena na FireMonkey ma po kompilaci skoro 10MB. to trosku ztraci na krase.

mitzix

7.9.2011 14:07:50 #

Radekc

Debug verze ma 10M, Release cca 3M.

Radekc

10.9.2011 0:42:43 #

Robert Gehrsitz

Thanks for putting this together.  Looking forward to future articles.

Robert Gehrsitz

12.9.2011 14:41:52 #

RadstaR

Dik moc za clanky o Firemonkey. Sice jsem jeste nemel tu cest, ale urcite se nekdy v budoucnu budou hodit.

RadstaR

16.9.2011 9:30:22 #

Jaroslav Dakš

Možná to s tím umíráním Qt ještě nebude tak horký:
http://www.linuxexpres.cz/novy-charakter-projektu-qt

Jaroslav Dakš

16.9.2011 9:55:12 #

Radekc

ad Qt: no uvidíme za dva roky.
To nic nemění ale na tom, že FireMonkey je koncepčně o dvě generace dopředu a jednoznačně bylo správné rozhodnutí postavit budoucnost na VLASTNÍ knihovně než na cizí, navíc když ta vlastní má technologicky mnohem lepší vyhlídky (HW akcelerace, architektura).

Na 100% jsem přesvědčen o tom, že zahodit Qt bylo jedno z nejlepších rozhodnutí, které EMBT provedlo.

Radekc

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