Náhodné výkřiky 15

vložil Radek Červinka 17. října 2011 22:36

Kupodivu mne stále ještě něco napadá, takže opět pár dalších poznámek. Dnes to bude zmínka o 64bit assembleru, FireMonkey, memory manageru, linkování COFF v Delphi a CnWizards. A na závěr kousek elegantního kódu.

FireMonkey a ClipChildren

Mám rád FireMonkey - podle mne je to velmi zajímavá platforma s velkým potenciálem. Má sice mouchy (i když se postupně odstraňují - např. zrychlení iOS aplikací v update 1), ale myšlenka je jasná. Přesto mne některé věci překvapují a tím nemyslím přejmenování některých Caption na Text (proč? a když tak proč ne všude?). Ale například toto:

Mějme PaintBox na formuláři (zároveň si ukážeme jak se liší kreslení od VCL):

procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
  R: TRectF;
begin
  Canvas.Clear(claBlue);
  Canvas.Stroke.Color :=  TAlphaColors.Red;
  Canvas.StrokeThickness := 1;
  Canvas.Stroke.Kind := TBrushKind.bkSolid;
  Canvas.StrokeDash := TStrokeDash.sdSolid;
  Canvas.Fill.Kind :=  TBrushKind.bkSolid;
  Canvas.Fill.Color := TAlphaColors.Aliceblue;

  with PaintBox1 do
    R := RectF(0, 0, Max(Width, Height), Max(Width, Height));
  FitRect(R, PaintBox1.LocalRect);
  Canvas.Fill.Color := TAlphaColors.Gold;
  Canvas.FillEllipse(R, PaintBox1.AbsoluteOpacity);
  Canvas.DrawEllipse(R, PaintBox1.AbsoluteOpacity);
end;

a pokud to spustíme, máme pokreslený celý formulář, nikoliv jen PaintBox. Klíčové je totiž nastavení property PaintBox.ClipChildren, která je podle mne nelogicky def. nastavená False. Jejím nastavením na True dostaneme požadované - tj. pokreslený PaintBox.

Letem webem

O tom, že Delphi XE2 umí linkovat COFF objektové soubory z VC++, jsem se již myslím zmiňoval. Normálně Delphi používá OMF (Object File Format) pro obj soubory. Ale obě verze XE2 (tj. 32bit i 64bit) nově umožňují i COFF - což výrazně zjednoduší život uživatelům XE2, na druhou stranu to možná zkomplikuje život u předchozích verzí.

Pěkné ukázky použití jsou zde: Using COFF C object files with Delphi X2

Allen Bauer napsal pokračování svého úvodu do 64bit ASM v Delphi - tentokrát o direktivách usnadňujících předávání parametrů pro 64bit - ono 64bit Windows ABI (Application Binary Interface) je trošku maso. Doporučuji si nejméně zapamatovat .NOFRAME. Tato direktiva zamezí generování rámce zásobníku pro "slepé funkce", tj. pro funkce, které už nic nevolají. V 64bit ABI musí mít totiž jinak každá funkce rámec zásobníku, pro zajištění korektního generování výjimek (resp. doufám že je to pro to). Ale pro slepé funkce je to zbytečné a zdržující - proto ta direktiva, která to vynutí. Kompilátor to většinou pozná - ale prý může nastat situace (někde jsem i viděl nějaký příklad), kdy to nepoznal - takže tímto mu pomůžete.

Porovnání Memory Managerů použitelných v Delphi - závěr je, že pro single thread (nebo s málo vlákny) aplikace je opravdu nejlepší FastMM (pro neznalé použijte tagy dole), pro více vláknové to je komplikovanější. Původní správce ze starších Delphi (tj. <D2006) se už ani neúčastnil, protože je opravdu už zastaralý. Zajímavé, že byl testován i ten z MSVCRT nebo co používá FireFox a obojí bylo horší.

cnwizards

Poslední CnWizards přidávají pěkný editor TImageList, který zároveň obsahuje volitelně vyhledávač ikon.

Kód na dobrou noc (sice ne Delphi, ale i tak pěkný):

function R(a,i,j,m,g){for(i=80;a[i];i--||+a);
for(m=10;g=a[i]=--m;g&&R(a))
for(j in a)g*=a[j^i==j]^m||i/9^j/9&&i%9^j%9&&i/27^j/27|i%9/3^j%9/3}

zdroj: Barry Kelly twitter (mimochodem jeden z R&D Delphi).

Vůbec nevím co to dělá a nemám odvahu to zkusit. Doufám, že jen to není část Delphi kompilátoru. Přiznám se, že klidně by to mohlo být napsané i japonsky a výsledek by byl stejný.

Tagy: , , ,

Komentáře

18.10.2011 1:43:17 #

RadstaR

Ten tvuj kod je tohle: https://gist.github.com/1232014 :)

RadstaR

18.10.2011 19:09:26 #

Kaco

Mam pre embarcadero novy projekt. Prerobit Delphi IDE do Firemonkey :), potom im uverim ze to je seriozna platforma. A ani nehovorim o tom, ako by na tom profitovali.. Delphi IDE na iPhone

Kaco

18.10.2011 21:28:10 #

Radekc

>Kaco

Předpokládám, že se jedná o vtip. V opačném případě je totiž ta poznámka naprosto mimo. Nehledě na nesmyslnost takové operace z hlediska finančního, nelze jednoduše nacpat 15let vývoje do několika let. VCL tu bude ještě hezkých pár let - dokud budou Windows.

To nic ale nemění na tom, že to byl jednoznačně správný krok z hlediska nových platforem a budoucnosti.

Radekc

18.10.2011 22:22:48 #

Kaco

V ziadnom pripade to nemyslim ako vtip
- z technickeho hladiska, firemonkey, je alternativa k VCL. Podla mna, jediny rozumny sposob ako vyvijat multiplatformne firemne aplikacie je striktne pouzivat firemonkey. Preco by nemalo ist prerobit Delphi IDE, ved je poskladane z VCL komponent? A kto by to uz mohol lepsie urobit ako Embarcadero samo.

- z marketingoveho hladiska by ani hadam nemohli urobit lepsi krok pre propagaciu samotneho firemonkey. Predstav si ten fakt ze by naozaj mali funkcne ide na kazdej platforme, kde by vedeli implementovat firemonkey. Mac, iPhone, Linux, Android....Kompilatory samotne zda sa niesu tiez neriesitelny problem v najhorsom vid sucane pouzitie freepascal-u.

Tym vsetkym chcem povedat, ze Firemonkey je genialna myslienka s obrovskym potencialom. Ale chvilu bude trvat kym sa budem moct bez strachu rozhodnut - prejdime kompletne na firemonkey

Kaco

18.10.2011 22:39:53 #

Radekc

IDE je převážně napsáno v Delphi VCL, ale jsou tam části psané i v .NET z období kdy tehdy Borland věřil, že budoucnost je .NET (věci ohledně refaktoringu atd.) - ty se dají sice zrušit (stačí smazat příslušné balíčky), ale přesto.

Teoreticky by byla možná portace na Linux nebo Mac. Ale bylo by to dost práce a myslím, že jsou jiné priority (kompilátor pro Android, Linux a iOS, vylepšení FireMonkey, optimalizace).

Ale IDE pro iPhone je úplná fikce - pamět, procesor, bez klávesnice atd.

Radekc

18.10.2011 23:05:20 #

Kaco

> Ale IDE pro iPhone je úplná fikce - pamět, procesor, bez klávesnice atd
aj iPhone bola na zaciatku fikce :)

Chystam sa na prednasku ”Hluboký ponor do FireMonkey”, urcite sa majstra Davida I na to opytam

Kaco

19.10.2011 7:20:34 #

Leoš

Kaco: zacinam se na prednasku tesit, zejmena pokud se ho zeptas konkretne na Delphi na Iphone :)
Ale vazne - tak urcite by to byl vyznamny signal pro vyvojare a rekl bych, ze tu myslenku maji v supliku nekde nahore. Na druhou stranu, kdyby to chteli udelat z gruntu, tak by XE2 vyslo v 2014 (mozna).

Leoš

19.10.2011 9:26:44 #

PS

???
ja neviem, zmenil sa nejak Firemonkey od betaverzie? nie je to náhodou len Form + jeden paintbox(canvas)? žiadne systémové tlačítka, edity funkcionalita nič ... všetko custom napísané pre ten canvas? Mať v tom napísané IDE tak to asi fakt venujem energiu na migráciu na Lazarus ... tam rovnako ako vo Firemonkey nie je dostupný žiadny rozumný reportovací tool a pod.... ale aspoň by mal človek natívne ovládacie prvky operačného systému ...

PS

19.10.2011 10:11:35 #

Radekc

>všetko custom napísané pre ten canvas
Ano a tak to zůstane, a to je ta genialita. A za tím si na 100% stojím. Klidně o tom přemýšlejte např. v kontextu Metro aplikací nebo čeho chcete.

Jinak IDE je opravdu dost vázané na Windows a přepsat ho a stabilizovat by trvalo nějakou dobu.

Radekc

19.10.2011 11:40:17 #

Tomas Hruska

Dle mého nelze čekat přepsání IDE v kratším horizontu a rozhodně dám přednost doplnění Linuxu jako platformy. Nejde jen o kompilátor, životně důležitý je dbExpress a dataSnap (ačkoli sám mám Linux leckde, primární jsou pro mě servery). Navíc je řada nástrojů jen ve VCL - třeba zrovna ty report tooly - a ani to nebude práce pro dva lidi na sobotní odpoledne :).

A poznámka k tomu Lazaru: reporty napr. http://fortes4lazarus.sourceforge.net

Tomas Hruska

19.10.2011 17:53:48 #

daemon_x

Už vidím, jak mi místo Code Insight přiletí nějaký otravný rotující list box, kde budou všemožně barevné položky a kompilace řešená jako průlet prostorem :)

daemon_x

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

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux 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

Dle měsíců