Mini recenze Delphi 2007 (část 2 / 2)

vložil Radek Červinka 11. prosince 2009 01:32

Jak jsem slíbil - je tu druhá část ohledně Delphi 2007 (Delphi 2009 a Delphi 2010 budou někdy následovat). Dnes tedy o RTL a VCL. Doporučuji čtení začít nejprve první částí popisující IDE, kompilátor a změny v jazyce zhruba tak od Delphi 7.

Změny v RTL

FastCode a FastMM

Největší změnou bezpochyby bylo zavedení FastMM4 v Delphi 2006. O tomto fantastickém správci paměti jsem již psal, takže se nebudu opakovat.

Zároveň od verze 2005 bylo z projektu FastCode (o něm jsem již také psal) postupně přebráno mnoho optimalizovaných rutin (v každé vyšší verzi další a další), např. Pos, Move, FillChar, StrLen, UpperCase, LowerCase, CompareStr atd. Evidentně se jedná o často používané funkce a to se projeví prakticky v každém programu.

Podpora GetEnumerator

Minule jsem ukazoval novou jazykovou konstrukci s for in do. Aby to bylo k něčemu, bylo třeba rozšířit některé třídy o podporu GetEnumerator.

Nejdůležitější je podpora v TList a TStringList atd. Z těchto třídy je například poděděn TObjectList tudíž automaticky získal stejné vlastnosti.

Samozřejmě použití generik z Delphi 2009 je mnohem lepší.

Další změny

TStrings má property LineBreak, která umožňuje lépe rozdělovat text do řádků.

Nový unit WideStrUtils, obsahující např. WideQuotedStr, WideStringReplace atd. a funkce pro podporu UTF-8 řetězců (UTF8LowerCase, ConvertStreamFromAnsiToUTF8 …).

Kromě uvedených funkcí obsahuje unit i TWideStrings a TWideStringList (wide varianty pro TStrings a TStringList). Samozřejmě s podporou Unicode v Delphi 2009 to pak má menší význam.

Zajímavou funkcí je SysUtils.IsAssembly, která podle parametru vrací zda DLL je klasická nebo .NET assembly. Zde bych opět rád připomněl existenci JCL, která má mnohem více podobných funkcí.

Změny ve VCL

Margins a Paddings

Modří již vědí - tedy pokud znáte CSS tak určitě.

Třída TControl byla rozšířena (od Delphi 2006) o property Margins:TMargins, která určuje rozestupy mezi dvěma controly (dá se specifikovat top, bottom, left a right a to v pixelech). Nezapomeňte to aktivovat nastavením AlignWithMargins na True.

Dále Padding:TPadding definuje vnitřní odstup od okraje kontrolu a kontrolem uvnitř kontrolu :-). No raději obrázek.

Margins a Paddings

Screenshot je sice z Delphi 2009 s instalovaným CnWizards (to ty číslíčka s tab order), ale to je jedno

Panel má nastaven Margins na 10 pixelů na všechny strany a Align = alTop. Lze pozorovat odstup o formuláře. Dále má nastaven Padding na 5 pixelů na všechny strany. Tlačítko má nastaveno Align = alLeft, tj. normálně by bylo připláclé vlevo, ale nyní ne - odstup 5 pixelů. Aktivace již uvedenou AlignWithMargins.

FlowPanel a GridPanel

Konečně. Vždy jsem chtěl nějakou takovou komponentu (vždy jsem to pak nějak emuloval). TFlowPanel se inspiroval v HTML a je to panel, který automaticky vedle sebe nasázené controls dokáže přeuspořádat podle šířky panelu, tj. třeba při šířce 100px se všechny vejdou na jeden řádek, ale pokud provedete změnšení tak se od konce začnou přesouvat na nový řádek.

V našem CRM systému to používám pro filtry pod gridem, takže při roztažení okna se pěkně vejdou do jednoho řádku.

FlowPanel

8 tlačítek na FlowPanelu

Naopak TGridPanel umožňuje definovat mřížku, který do polí umožňuje dát controly. Počet sloupců a řádků je definován pomocí kolekcí ColumnCollection a RowCollection. Při roztahování se control umístěný v poli chová jako by byl na samostatném panelu. A samozřejmě ty čárkované čáry nejdou za běhu vidět.

Pro každý sloupec (řádek) lze definovat, zda je určen procenty, pixely nebo automaticky.

GridPanel

ExplicitTop, ExplicitLeft, ExplicitHeight a ExplicitWidth

TControl definuje čtyři nové uvedené property, ve kterých si IDE pamatuje pozice před nastavením Align nebo Anchor. Po vypnutí se vrátí control tam kde byl.

ButtonGroup a CategoryButton

TButtonGroup je něco jako toolbar s tlačítky, ale s tím že ho můžete dát kdekoliv. Mnohem lepší je TCategoryButton, kde můžete definovat kategorie a pro každou kategorii tlačítka, kategorie se dají schovávat. Navíc se dají se definovat gradienty pro každou kategorii zvláště. Pro obě komponenty se dá specifikovat velikost tlačítek.

ButtonGroup a CategoryButton

Screenshot je také z Delphi 2009

Osobně si myslím, že v JVCL je na podobné věci ještě hezčí komponenta.

MouseActivate

TControl nyní přidává událost OnMouseActivate, která umožňuje při aktivaci okna myší zpracovat kliknutí (třeba ho zpracovat tak, že se nepředá dále), tj. např. pokud obsloužíme tuto událost na formuláři, můžeme zabezpečit, že pokud uživatel klikne na tlačítko v okně při aktivaci nebude tlačítko poprvé volat OnClick.

No mi to celkem přijde zbytečné, ale někteří uživatelé jsou prostě jiní.

TrayIcon

Od verze Delphi 2006 je součástí VCL i komponenta TTrayIcon. Kromě jiného má TTrayIcon property BalloonHint, BalloonTitle (a další), které umožňují zobrazit již klasickou nápovědu ve tvaru balónu.

  object trayicon1: TTrayIcon
    BalloonHint = 'To je jen demo pro Delphi.cz'
    BalloonTitle = 'Delphi.cz'
    BalloonTimeout = 1000
    BalloonFlags = bfInfo
    Visible = True
    OnMouseDown = trayicon1MouseDown
    Left = 84
    Top = 324
  end

TrayIcon

procedure TForm1.trayicon1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  trayicon1.ShowBalloonHint;
end;

Jistě už používáte nějakou jinou, ale tato je opravdu dobrá, je ve VCL, a už jen pro možnost bezbolestného upgrade, nebo podporu BallonHint ji doporučuji.

Nezapomeňte, že Application.ShowMainForm := False; schová překvapivě hlavní okno aplikace, a v tom případě je tray ikona rozumná možnost pro ovládání programu.

Ostatní

  • TToolBar a TControlBar mají možnost gradientu na pozadí
  • lze aktivovat plnou podporu kolečka myši přidáním IMouse unitu
  • Změna FormStyle, BorderStyle a BorderIcons nezpůsobí recreate okna
  • Defaultní hodnota AutoScroll je nyní false (tj. pro systémy s velkými fonty vše okamžitě funguje)
  • Nezkoušel jsem, ale od Delphi 2005 prý lze definovat následníka TMainMenu, u něho předefinovat CreateMenuItem a designer by to měl vzít v potaz
  • (já jsem vždy kopíroval menus.pas a tam prováděl úpravy, ale to není vůbec korektní způsob)
  • od Delphi 2005 je podpora pro unit test framework DUnit (škoda, že nepoužívám takže nemohu sloužit)

Vylepšená podpora Windows Vista

Nezapomeňte nastavit Application.MainFormOnTaskBar := True v dpr souboru aby Visty mohly pěkně zobrazit obsah i minimalizovaného okna.

V Delphi 2007 přibyla pro TForm property GlassFrame, právě pro lepší podporu ve Vistách. Ale pozor! Není definována přímo jako property TForm (nebo TCustomForm), ale právě přes minule zmíněnou podporu ClassHelpers.

Podpora pro nové dialogy z Vist (TaskDialog API funkce) je přes komponentu TTaskDialog nebo transparentně přes MessageDlg, kde globální proměnná UseLatestCommonDialog určuje, který dialog se bude volat (tj. XP nebo Vista).

Zaroveň byla přidána podpora pro nové CommonDialogs jako je TOpenDialog atd. Opět přes UseLatestCommonDialog lze specifikovat zda klasický TOpenDialog bude používat jakou verzi (doporučené z hlediska kompatibility). Jinak existují speciální komponenty TFileOpenDialog a TFileSaveDialog. Ovšem jejich použití za běhu třeba na XP způsobuje Project Project1.exe raised exception class EPlatformVersionException with message 'TFileOpenDialog requires Windows Vista or later'.

Při kompilaci je Warning: Unit2.pas(12): W1002 Symbol TFileOpenDialog is specific to a platform.

Podpora Themes alias stylů

IDE v Project Options nabízí volbu Enable runtime themes, což způsobí, že se linker hecne a přilinkuje manifest s povolenými styly a navíc v designeru budou styly pěkně vidět. Kromě toho byla vylepšena podpora některých komponent pro styly (mimochodem podpora stylů je původně od Mike Lischkeho, autora Virtual TreeView).

TreeView se zapnutými styly zobrazuje malé trojúhelníčky místo plus a mínus (jen na Vistách).

SOAP support

Byl vylepšen WSDL importer (v dalších verzích ještě mnohem více včetně konečně SOAP 1.2 v Delphi 2010) a je dostupný i jako samostatná aplikace včetně zdrojových kódů. (c:\Program Files\CodeGear\RAD Studio\5.0\source\Win32\soap\wsdlimporter, je tam i pro Delphi 2009), popř. c:\Program Files\CodeGear\RAD Studio\5.0\bin\WSDLImp.exe jako binárka.

Letem databázovým světem

Interně byla přidána podpora pro WideString do datových struktur pro databáze (např. TField má metody typu .AsWideString). A velkou změnou je přidání TWideDataSet = class (TDataSet, IProviderSupport2), kde zmíněný interface (někdy překládáno na Moravě jako meziksicht) používá WideString. Tato třída je bázovou třídou pro ADO, ClientDataset a většinu ostatních datasetů, kromě BDE.

Jen pár poznámek: dbExpress v Delphi 2006 je verze 3.x a podporuje Unicode (třeba pro MS SQL). dbExpress v Delphi 2007 byl kompletně přepsán do Delphi a jedná se o verzi 4. Část kódu byla otevřena (zbytek byl až v Delphi 2009 nebo Delphi 2010).

Tak to bylo opravdu zjednodušeně Delphi 2007 a předchozí verze. Někdy příště bude Delphi 2009 (pro ty co nechtějí čekat doporučuji stáhnout knihu od Marka Cantu - jak jsem psal minule).

Tagy: , , , , , ,

Recenze

Komentáře

10.8.2011 15:07:50 #

JaroB

Máte někdo zkušenosti s labelededit na flowpanelu? V Delphi 2007 mi to sestřihává labely při přerovnání panelu a někdy ukazují rovnou za roh. Mám sice náhradní řešení, podkládám pod to panel, ale není to úplně to pravé :(

JaroB

11.9.2012 7:29:26 #

Женя

Спасибо за статью, помогла разобраться с парочкой новых для меня компонентов

Женя

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ů