Opět pár poznámek ohledně toho co mne praštilo do očí. A hlavně pár veřejných informací o FireMonkey.
Začnu velmi prima chybou:
if 3 > 5 then;
begin
ShowMessage('3 větší než 5!!');
end;
Když jsem podobný kód napsal poprvé, tak mi trvalo pár minut než jsem přišel na to, kde je chyba. No jen se pobavte. (Další mojí oblíbenou chybou je while not ds.Eof do … bez ds.Next).
Mnohem zajímavější ale je co napsal Andreas Hausladen o resource stringu. Upozorňuje na to, že pokud používáte resource string v často volaném kódu tak je to problém, jelikož při každém jeho použití je tento řetězec znovu načten z resources. Ačkoliv se použití vyhýbám - toto mne překvapilo. Ale na 100% mu věřím, jelikož pokud je někdo odborníkem na optimalizace, tak je to kromě Eric Grange právě Andreas Hausladen, jehož rozšíření Delphi znatelně v předchozích verzích (tj. <D2010) zrychlují a teď jsou jejich součástí.
Ale zpět k resource stringu: Andy tvrdí, že kompilační dialog pro Delphi 5 - 2007 nevhodně obsahuje resource stringy a díky tomu, že se průběh během kompilace vypisuje často, procesor tráví 10% času nahráváním resource stringu místo kompilace. Opraveno v D2009 nebo v IDEFixPack.
Mimochodem experimentální IDE Fix Pack 4.3 Beta 4 přináší fastdcc.exe, které podle jeho twitteru: dcc32.exe versus fastdcc.exe: 10.51 vs. 3.53 sekund. Hmm, je to bůh.
V konferenci na builder.cz se vyskytnu opravdu výjimečně, ale teď mne tam zaujal dotaz jak klonovat komponentu za běhu. Řešení co jsem našel je podle mne prima:
function CloneComponent(AAncestor: TComponent): TComponent;
var
XMemoryStream: TMemoryStream;
XTempName: string;
begin
Result:=nil;
if not Assigned(AAncestor) then exit;
XMemoryStream:=TMemoryStream.Create;
try
XTempName:=AAncestor.Name;
AAncestor.Name:='clone_' + XTempName;
XMemoryStream.WriteComponent(AAncestor);
AAncestor.Name:=XTempName;
XMemoryStream.Position:=0;
Result:=TComponentClass(AAncestor.ClassType).Create(AAncestor.Owner);
if AAncestor is TControl
then TControl(Result).Parent:=TControl(AAncestor).Parent;
XMemoryStream.ReadComponent(Result);
finally
XMemoryStream.Free;
end;
end;
end
FireMonkey
Primární framework pro Windows je stále VCL (je rozšířeno o podporu stylů a databinding). FireMonkey je crossplatform framework.
Andreano Lanusse jakožto z EMBT může už nyní psát, takže určitě se na odkazovaný článek podívejte, je tam screenshot. Zkusím papouškovat to co je důležité a co je veřejné, než bude uvolněna NDA.
Možná jsem to minule nezdůraznil - ale jedná se o nativní vektorový framework, plně HW akcelerovaný. Jak píše v komentářích k tomu článku David I - 2D verze se zove FireMonkey HD, 3D verze je FireMonkey 3D. Pravidelní čtenáři delphi.cz mají přesnou představu odkud vítr vane.
Platformy jsou zatím Win32, Win64, Mac OSX. Na prvních dvou je používán Direct2D nebo Direct3D (případně GDI+ pokud není Direct2D dostupné), na Mac OSX OpenGL. Ostatní platformy budou následovat (tj. Linux, mobilní atd.).
Abych předešel dotazům: Není to postavené na QT, je to mnohem modernější.
Pokud Vás zajímá něco konkrétního ohledně XE2 (FireMonkey, x64 …) napište sem do komentářů, já na ně po uvolnění NDA zkusím odpovědět.