Umíme to s Delphi: 67. díl – novinky Delphi 7 a komponenta ValueListEditor

V tomto předvánočním čase je ideální příležitost uvolnit se, oddychnout si a trochu relaxovat. V tomto duchu se bude odvíjet i dnešní díl seriálu: nebude se zabývat žádnou těžko pochopitelnou technologií ani vypečenými programátorskými fígly. Sedmá verze Delphi je sice na světě již nějaký čas, přesto snad neuškodí letmý přehled jejích změn a vylepšení. Ve druhé části článku se zaměříme na novou, lepší třídu TStrings a komponentu ValueListEditor pro správu údajů ze souborů *.ini.
Přestože sedmá verze Delphi není už rozhodně novinkou, určitě stojí za to podívat se, v čem se vlastně liší od svých předchůdců. Změny v některých oblastech nejsou rozhodně zásadní. Všichni si jistě pamatujeme, jakou revolucí byl nástup technologie dbExpress při vydání Delphi 6, zatímco nynější změny v databázové oblasti jsou spíše kosmetické. Na druhou stranu novinek je celá řada a ne každý má chuť studovat je z manuálu nebo nápovědy.

První oblast, která doznala změn, je integrované prostředí (IDE). Došlo k rozšíření možností nastavení kompilátoru, při vytváření CLX aplikace spatříme novou verzi strany System palety komponent (připomeňme, že v předchozích verzích se tato stránka v aplikacích CLX vůbec nevyskytovala, neboť VCL verze obsahovala komponenty zapouzdřující nejrůznější mechanismy systému Windows). Kromě toho nalézáme nové stránky Indy Interceps a Indy I/O Handlers, pro vývoj webových aplikací můžeme používat také několik dalších nových stránek (myslím, že není nutný přesný výčet). Za zmínku ale určitě stojí komponenty z palety Rave, které umožňují generování nejrůznějších reportů, včetně výstupů do HTML, RTF nebo PDF. Asi se v seriálu nestihneme podrobně zabývat všemi novými komponentami, ale na mnohé z nich bych se rád v příštích dílech zaměřil.

Vylepšení se týkají také nástroje Code Completion pro dokončování kódu, nově je k dispozici HTML code completion, který zobrazuje platné elementy HTML.

Pokud jde o debugger, rozšíření se dočkal Watch List, který umožňuje sdružovat „watche“ do skupin (pro neznalé – watchem rozumíme proměnnou nebo výraz, jehož hodnotu při ladění programu neustále sledujeme a pozorujeme její změny).

Zajímavá je možnost, kterou naleznete v nabídce Tools – Editor Options – Source Options. Je totiž možné zvolit typ zdrojového jazyka (Pascal, HTML, C++, XML...) a pro každý z nich nastavovat různé vlastnosti editoru.

Změn v IDE je ještě několik, ale další již myslím není třeba popisovat, jsou spíše kosmetické.

Druhá, velmi rozsáhlá skupina vylepšení se týká podpory vývoje webových aplikací (platí pro edice Professional a Enterprise). Delphi nyní např. podporuje Apache 2. Dalších vylepšení je celá řada, nicméně webovými aplikacemi jsme se dosud v seriálu nezabývali, proto se nás tato vylepšení prozatím příliš netýkají.

Totéž platí také o rozšíření podpory COM (Component Object Model), která nyní umožňuje využívat vlastností technologie .NET Framework.

Pojďme se podrobněji podívat na databázovou oblast. Jak je uvedeno výše, změny nejsou vůbec zásadní. Mohli bychom je shrnout do tří nejdůležitějších bodů:

  • Ovladače dbExpress byly aktualizovány a v době vydání Delphi podporovaly tyto databáze: Informix SE, Oracle 9i, DB2 7.2, Interbase 6.5, MySQL 3.23.49. Přibyl také jeden zcela nový ovladač, a to pro server MS SQL 2000.
  • Objevilo se několik nových databázových komponent, např. pro základní operace s klientskými datovými sadami (datasety) TClientDataSetApply, TClientDataSetUndo, TClientDataSetRevert; paleta dbExpress je obohacena o komponentu TSimpleDataSet (která nahrazuje TSQLClientDataSet) apod.
  • Borland oficiálně prohlásil technologii SQL Links za „deprecated“ (zavrženou). Jinými slovy – SQL Links se již nedočkají žádných dalších rozšíření ani žádné další podpory, po roce 2002 již dokonce nemá být součástí Delphi. Namísto ní je doporučeno používání dbExpress.

Nejedná se tedy vůbec o závažné změny.

Při vylepšování se nezapomnělo ani na knihovnu komponent. Aplikace postavené na knihovně VCL nyní budou automaticky používat ovládací prvky systému Windows XP, pokud naleznou příslušný soubor „manifest“. S výše uvedenými databázovými vylepšeními souvisí také nová jednotka (Unit) DBClientAcnts obsahující již zmíněné komponenty pro práci s klientskými datovými sadami (datasety): TClientDataSetApply, TClientDataSetUndo, TClientDataSetRevert. Nalézáme také několik dalších nových komponent z dalších oblastí: TPageSetupDialog pro otevření klasického dialogu Vzhled stránky, TXPColorMap, TStandardColorMap a TTwilingColorMap pro práci s barvami v nabídkách a panelech nástrojů.

Některé stávající komponenty se také drobně změnily. Například CLX verze komponent TOpenDialog a TSaveDialog jsou nyní „vypečenější“ a podporují třeba funkci Náhled. Komponenta TCustomComboBoxEx má nyní vylastnost AutoCompleteOptions, díky níž rozbalovací seznam (Combo Box) může reagovat na uživatelské klávesové zkratky.

Zapomenout nelze ani na změny v běhové knihovně (Runtime Library, RTL). Nalézáme novou třídu výjimek, EFileStreamError. Tato výjimka nyní disponuje parametrem FileName, díky němuž případné chybové hlášení může nést informaci o tom, v kterém souboru došlo k chybě. Třída TStrings má dvě nové vlastnosti: ValueFromIndex a NameValueSeparator, díky nimž je možné pracovat s řetězci typu Jméno=Hodnota. S tímto vylepšením třídy TStrings se seznámíme podrobněji v další části článku, stejně jako s komponentou ValueListEditor, která jde s uvedenou změnou ruku v ruce. Vraťme se však ke změnám v běhové knihovně: metoda CheckThreadError třídy TThread byla „povýšena“ ze sekce private na protected.

V knihovně StrUtils přibyla nová funkce pro prohledávání řetězce. Zajímavé změny ale nastaly také v knihovně SysUtils, neboť byla rozšířena o nové (resp. předefinované staré) funkce pracující bezpečně i ve vícevláknovém programu. Jedná se především o rutiny pro formátování a parsování čísel, datumových, časových a měnových údajů. Funkce jsou nyní „thread-safe“ především proto, že získají informaci o svém umístění ze struktury TFormatSettings namísto z globálních proměnných. Pro správnou funkci je nutné před prvním použitím zavolat funkci GetLocaleFormatSettings.

Několik změn a vylepšení nalezneme také v jednotce Variants.

Další novinky bychom ještě nalezli u kompilátoru a v souvislosti s nástrojem ModelMaker. Zapomenout nelze ani na dokumentaci. Myslím však, že všechno nejdůležitější jsme si uvedli výše a můžeme se podívat na druhou část dnešního dílu. Tou je procházka po několika nových, zajímavých komponentách, které může použít skutečně každý.

Nová, lepší třída TStrings

Jak jsme uvedli v první části článku, třída TStrings je rozšířena o vlastnosti NameValueSeparator a ValueFromIndex. K čemu tyto vlastnosti slouží?

Používají se v případě, že hodláme spravovat řetězce v následujícím tvaru:

Jméno <oddělovač> Hodnota

Příklad:

DisplayGrid=1
SnapToGrid=1
GridSizeX=8
GridSizeY=8

O praktickém využití asi netřeba dlouze hovořit – situací, v nichž potřebujeme uchovávat tento typ údajů, existuje celá řada (typicky soubory *.ini). Pomocí vlastnosti NameValueSeparator (typu Char) můžeme určit znak, který vystupuje jako oddělovač (v předchozích příkladech jím bylo rovnítko). Znak = je také default hodnotou této vlastnosti. Obsahuje-li řetězec jakékoliv mezery před nebo za oddělovačem, posuzují se jako součást jména, resp. hodnoty.

Druhou související vlastností je ValueFromIndex. Ta reprezentuje část „hodnota“, tedy část za oddělovačem v řetězci, který zadáme indexem. Jinak řečeno: pomocí této vlastnosti získáme hodnotu i-tého řetězce v poli TStrings.

Uveďme si příklad. Máme objekt Strings třídy TStrings, který obsahuje následující řetězce:

Strings[0] = ‘Šířka=25’;
Strings[1] = ‘Délka=36’;
Strings[2] = ‘Hloubka=47’;
Strings[3] = ‘Průměr=58’;

Potom platí, že hodnota Strings.IndexFromValue[2] je rovna 47 a hodnota Strings[2] je rovna ‘Hloubka=47’.

Komponenta ValueListEditor

S třídou TStrings a s jejími uvedenými vlastnosti souvisí především komponenta ValueListEditor, která se v Delphi 7 nalézá na záložce Additional palety komponent (v Kylixu není dostupná).

Tato komponenta je vlastně specializovanou mřížkou (Grid), která slouží k práci s řetězci ve formátu Jméno <oddělovač> Hodnota. Je snad zbytečné dodávat, že řetězce zobrazované v komponentě se uchovávají ve vlastnosti Strings třídy TStrings.

Jak vidíte z níže uvedených obrázků, mřížka má dva sloupce: první je standardně nazvaný „Key“ a druhý „Value“. Tato defafultní jména lze změnit nastavením vlastnosti TitleCaptions (podrobnosti viz níže):

Klepněte pro větší obrázek

Než se projdeme po vlastnostech komponenty ValueListEditor, je třeba zmínit, že tato komponenta je potomkem třídy TCustomGrid, takže zdědila celou řadu vlastností souvisejících s mřížkou (komponentou Grid). Navíc samozřejmě disponuje výhodami třídy TStrings.

Pojďme se nyní stručně podívat na vlastnosti komponenty ValueListEditor:

Vlastnost Popis
Cells[a,b] Vrátí řetězec ze sloupce a a řádku b.
DisplayOptions Pomocí této vlastnosti je možné nastavovat řadu detailů souvisejících se vzhledem komponenty, např. titulky obou sloupců, automatické nastavování šířky sloupců a další podrobnosti.
ItemProps Tato vlastnost slouží k definici nejrůznějších omezujících podmínek, za nichž uživatel může/nemůže zadávat do mřížky data a modifikovat je. Příklad: můžeme prohlásit, že položka je read-only, můžeme stanovit nejvyšší počet položek, které uživatel může zadat, můžeme dokonce uživateli povolit, aby při pokusu o zadání hodnoty spatřil rozbalovací seznam nebo dialogové okno apod.
KeyOptions Udává, jakým způsobem má komponenta reagovat na stisk klávesy. Můžeme např. uživateli povolit, aby měnil pouze jméno (nikoliv hodnotu) řetězce, můžeme mu povolit, aby přidával nové položky, stejně jako mu povolit, aby mazal existující. Dokonce je možné zajistit, aby nemohl zadat novou položku stejného jména, jaké již v seznamu je.
Keys Indexované vlastnost obsahující všechny klíče (tedy jména, údaje z levého sloupce) údajů uvedených v komponentě.
Strings Nejdůležitější vlastnost komponenty. Je třídy TStrings a obsahuje všechny položky, které komponenta obsahuje. O této třídě se dočtete více v předchozí podkapitole.
TitleCaptions Umožňuje získat/modifikovat záhlaví (nadpisy) obou sloupců v mřížce.
Values Indexovaná vlastnost obsahující všechny hodnoty (tedy údaje z pravého sloupce) údajů uvedených v komponentě.

Komponenta má kromě toho celou řadu dalších vlastností, které zdědila od svých předků, především od komponenty TCustomGrid.

Kromě vlastností nalézáme u komponenty ValueListEditor samozřejmě také metody a události. Metody se týkají především práce s mřížkou jako takovou, ale umožňují i některé „specializované“ operace šité „na míru“ řetězcům typu Jméno/Hodnota, například DeleteRow pro výmaz řádky nebo IndexRow pro vložení nové řádky (v parametrech metody InsertRow je možné zadat jak klíč, tak hodnotu).

Také některé události komponenty úzce souvisí s jejím zaměřením na řetězce Jméno/Hodnota, jedná se například o události OnGetPickList (pokud se uživateli zobrazí seznam dostupných hodnot pro daný klíč), OnStringsChange (v okamžiku bezprostředně následujícím po změně jména nebo hodnoty v mřížce), OnValidate (v okamžiku, kdy se zaměření přesouvá z aktuální buňky jinam a my potřebujeme otestovat platnost zadaných údajů) a OnEditButtonClick, která se používá v případech, v nichž chceme uživateli zobrazit dialogové okno pro zadávání určité hodnoty do komponenty ValueListEditor.

Z tohoto velmi stručného souhrnu plyne, že pokud potřebujeme pracovat s řetězci ve formátu Jméno/Hodnota, může být nová třída TStrings a komponenta ValueListEditor vhodnou kombinací.

Na závěr

Pokud jste zklamáni poměrně povrchním průzkumem komponenty ValueListEditor, pak vězte, že tento článek měl sloužit pouze pro základní seznámení s danou komponentou a pro pochopení jejího principu. Této komponentě (jakož i dalším novinkám Delphi 7) se budeme podrobněji věnovat v dalších článcích. Konkrétně komponentu ValueListEditor využijeme, až se budeme zabývat soubory *.ini. Pak si také ukážeme příklady praktického použití.

Šťastné a veselé

Na závěr dnešního předvánočního dílu si dovolím popřát všem čtenářům klidné Vánoce, pokud možno neprotknuté klasickým vrčením počítačového zdroje, a za týden se těším letos naposledy nashledanou.

Diskuze (3) Další článek: Intel končí s procesory Celeron (Tualatin)

Témata článku: Software, Programování, Celá knihovna, Zajímavá funkce, Nová třída, Díl, Druhá novinka, Následující řádek, Zajímavé jméno, Sloupec, Options, Nový typ, Předchozí nástroj, Druhý typ, Nejrůznější nástroje, Filename, Komponenta, Vylepšený editor, Nová metoda, Celá řada, Nová komponenta, Nová změna, Rave


Určitě si přečtěte

Loopwheels znovu vymyslelo kolo. Místo drátů má v ráfcích kompozitové pružiny, které vylepší komfort jízdy

Loopwheels znovu vymyslelo kolo. Místo drátů má v ráfcích kompozitové pružiny, které vylepší komfort jízdy

** Proč vymýšlet kolo? Protože ho lze vymyslet lépe! ** Kola Loopwheels nabízejí integrované odpružení ** Cílem je poskytnout pohodlnější a klidnější jízdu

Karel Kilián | 14

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 66

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

** Concorde byl nejrychlejším dopravním letadlem ** Atlantik dokázal přeletět za cca 3 až 3,5 hodiny ** Před osmnácti lety tragická havárie provoz těchto letadel prakticky ukončila

David Polesný, Jiří Černý | 37

Podívejte se, co se stane, když dron DJI Phantom narazí do křídla letadla

Podívejte se, co se stane, když dron DJI Phantom narazí do křídla letadla

** Co se může stát, když relativně maličký dron narazí do křídla letadla? ** Tuto otázku zodpověděli odborníci laboratorním pokusem ** Kvadrokoptéra způsobila významné poškození křídla

Karel Kilián | 19

Google Cloud Next: Blíží se bitva o to, kdo ovládne cloud, tedy internet zítřka

Google Cloud Next: Blíží se bitva o to, kdo ovládne cloud, tedy internet zítřka

** Google v týdnu ukázal nové telefony Pixel ** V Londýně se ale také konal Google Cloud Next ** Konference o tom, jak bude vypadat internet v cloudu zítra

Jakub Čížek | 31

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

Roboruka se 100 let učila otočit kostičku. Skutečné A.I. se možná nikdy nedočkáme

** Strojové učení v posledních deseti letech dokázalo divy ** Používáme ho dnes každý den nejen ve vyhledávači ** A přesto se člověku nepřibližuje ani náznakem

Jakub Čížek | 59


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku