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í, Nový typ, Options, Rave, Následující řádek, Nová metoda, Nová změna, Nová komponenta, Zajímavá funkce, Sloupec, Filename, Díl, Celá knihovna, Druhá novinka, Vylepšený editor, Předchozí nástroj, Druhý typ, Nová třída, Komponenta, Nejrůznější nástroje, Zajímavé jméno, Celá řada


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

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

** Microsoft představil nový tablet Surface Go ** Nový model zaujme nízkou cenou, ale schopnostmi zařízení Surface ** Microsoft nepoužil čip ARM, ale klasický procesor od Intelu 

Karel Javůrek | 116

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

** Dlouho se nevědělo, co to přesně má být ** Pak se s krabičkou Google pochlubil na I/O ** Do „Chromecastu“ vtěsnal celý Android TV

Jakub Čížek | 24

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

** Čeští vědci pod vedením Tomáše Jungwirtha vyvíjí nový typ revolučního paměťového čipu ** Zatímco v současnosti elektronika pracuje s elektrony, v budoucnu to budou spiny elektronů ** Čipy budou moci být klidně i 1 000x rychlejší a úspornější

Karel Javůrek | 32

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 56

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ý | 65

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji