Ú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.

procedure TfrmCustomList.Button2Click(Sender: TObject);
var
  Item: TListBoxItem;
begin
  // create custom item
  Item := TListBoxItem.Create(nil);
  Item.Parent := ListBox1;
  // this code set event - when we need to setup item
  Item.OnApplyStyleLookup := DoApplyStyleLookup;
  // this set our style to new item
  Item.StyleLookup := 'CustomItem';
end;

procedure TfrmCustomList.DoApplyStyleLookup(Sender: TObject);
var
  B: TBitmap;
  Item: TListboxItem;
begin
  Item := TListBoxItem(Sender);
  // create thumbnail
  B := TBitmap.Create(10 + random(50), 10 + random(50));
  B.Clear($FF000000 or TAlphaColor(random($FFFFFF)));
  // use this to set our child controls value - this code use BindingName in style to search
  Item.Binding['image'] := ObjectToVariant(B); // set thumbnail
  Item.Binding['text'] := 'item ' + IntToStr(Item.Index); // set filename
  Item.Binding['resolution'] := IntToStr(B.Width) + 'x' + IntToStr(B.Height) + ' px'; // set size
  Item.Binding['depth'] := '32 bit';
  Item.Binding['visible'] := true; // set Checkbox value
  Item.Binding['visible'] := EventToVariant(DoVisibleChange); // set OnChange value
  Item.Binding['info'] := EventToVariant(DoInfoClick); // set OnClick value
  // free thumbnail
  B.Free;
end;

procedure TfrmCustomList.DoInfoClick(Sender: TObject);
begin
  InfoLabel.Text := 'Info Button click on ' + IntToStr(ListBox1.ItemIndex) + ' listbox item';
end;

procedure TfrmCustomList.DoVisibleChange(Sender: TObject);
begin
  InfoLabel.Text := 'Checkbox changed ' + IntToStr(ListBox1.ItemIndex) + ' listbox item to ' + BoolToStr(Listbox1.Selected.Binding['visible'], true);
end;

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ě.

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

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).

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.

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.

Poslední komentáře

Comment RSS