Živě.cz o počítačích a internetu

Tipy a triky v Delphi, díl 157. - CoolBar

Jan Šindelář 6.10.2004

Dnešní díl bude opět poněkud zaměřen na začátečníky a naučíme se vytvářet lépe uživatelsky přizpůsobitelné prostředí aplikace s pomocí komponenty CoolBar.

Při tvorbě uživatelského rozhraní se u složitějších aplikací začalo používat nejprve tzv. Toolbarů. Jedná se o (dnes již snad drtivé většině uživatelů notoricky známý) panel, který obsahuje řadu malých ikonek, resp. tlačítek. Tato malá tlačítka nemají obvykle žádný popisek, jsou označena právě jen zmiňovanou ikonou, která nějak vhodně symbolizuje jeho funkci. Nejčastěji používané funkce jako je například uložení či načtení dokumentu pak uživatel nehledá složitě ve struktuře menu, ale má je k dispozici na jedno kliknutí. Jednotlivá tlačítka jsou pak seskupena do (nejčastěji) horizontálního panelu, který je umístěn těsně pod hlavním menu a jednotlivé funkčně související skupiny tlačítek ještě bývají ohraničeny vertikálním oddělovačem. Toolbar (existují však i jiné názvy) tedy všichni dobře známe a jeho přidání do aplikace je pomocí vestavěných komponent velmi snadné.

Dnes však již u rozsáhlejších aplikací nemusí funkčně postačovat. Dnešek je dobou profilů, skinů, zkrátka vlastních uživatelských nastavení a tak je logické, že i Toolbar doznal několik zásadních změn, aby vyšel novým požadavkům na uživatelskou přizpůsobitelnost vstříc. V dnešních aplikacích již najdeme jinou odrůdu tohoto objektu (zkuste se třeba podívat na Word, ale používá se i v samotných Delphi). Umožňuje jednak umístit na panel prakticky libovolnou komponentu a co je neméně důležité, lze jednotlivé panely přeskupovat do takových sestav, které uživateli nejvíce vyhovují. V Delphi se tento vylepšený prvek nazývá příznačně CoolBar a naučíme se jej nyní používat.

Pokud slyšíte toto označení poprvé, bude tento článek přesně pro vás, protože jste pravděpodobně nikdy nezabrousili na záložku Win32 na paletě komponent, resp. jste si zde této komponenty nevšimli. Právě zde totiž CoolBar najdeme. Jak funguje? Zjednodušeně řečeno se jedná o běžný panel, který po umístění na formulář celkem nic nenabízí. Ožije až přidáním tzv. CoolBand prvků, což jsou již jednotlivé oblasti ve stylu původních Toolbarů opět v podobě (menších) panelů, které pak obsahují konkrétní komponenty. Právě tyto CoolBand panely (proužky) i s komponentami, které obsahují, lze přesouvat a přeskupovat za běhu aplikace. V zásadě se tedy dá říci, že hlavní komponenta CoolBar je jakýsi prostor, hřiště, po jehož ploše se dají přesouvat jednotlivé CoolBands, které vlastně funkčně kopírují původní ToolBary s tím rozdílem, že mohou obsahovat prakticky libovolnou komponentu. Samotná práce pak spočívá nejprve v umístění Coolbaru a nastavení jeho vlastností (viz. dále), poté na něj umístíme jednotlivé CoolBandy a ty pak obsahují konkrétní komponenty.

Pojďme si to zkusit na testovací aplikaci. Na prázdný formulář nejprve umístíme komponentu CoolBar. Ta se nám implicitně zarovná k hornímu okraji formuláře, kde obvykle tyto panely běžné aplikace mívají. Nic nám ale případně nebrání zarovnání změnit pomocí příslušné vlastnosti v Object Inspectoru, kde se podívejte i na další vlastnosti, které komponenta má. Můžete nastavit rozměry, obrázek na pozadí, dá se uživatelům i zakázat přeuspořádání jednotlivých vnitřních panelů, i když to je trošku proti zmiňované uživatelské přizpůsobitelnosti aplikace (přesto to může být někdy vhodné a potřebné).

Když máme připraven prostor pro jednotlivé vnitřní panely, je čas je na CoolBar přidat. Na první pohled nemusí být jasné jak, ale prozkoumáním vlastností v Object Inspectoru nalezneme položku Bands, jejíž aktivací se otevře známý editor, pomocí kterého se ovládá i řada jiných komponent v Delphi. Přes tento editor pak můžeme přidat do CoolBaru potřebné množství CoolBandů a pochopitelně nastavit i jejich individuální vlastnosti. Když poté umístíme někam na formulář aplikace některou z komponent, třeba ComboBox, můžeme pak tuto přidanou komponentu přes editor vlastností CoolBandů přiřadit příslušnému CoolBandu a stane se jeho součástí. Druhý a rychlejší způsob je umístit libovolnou komponentu přímo na CoolBar. Bude pro ni automaticky vytvořen nový CoolBand.

Tímto způsobem tedy zkuste na prázdný CoolBar přidat původní Toolbar a na něj přidat několik tlačítek. Přidáme-li těchto ToolBarů více, získá pak uživatel možnost jejich přemisťování a uspořádávání. Abyste si zkusili i možnost přidání jiných komponent, zkuste přidat Edit a ComboBox. Teď už váš příklad může vzdáleně připomínat Word či jiný editor. V něm najdeme kromě klasických ToolBarů s minitlačítky i ComboBoxy pro výběr typů písma a stylů a podobně. Vše je pak v rámci hlavního CoolBaru uživatelem přeskupitelné.

Co se týče možnosti přidat na CoolBar libovolnou komponentu, platí zde přeci jen jisté omezení a to na možnost použít jen objekty odvozené od TWinControl. Jiné objekty než typu TWinControl (např. Label) na CoolBar nelze běžným způsobem umístit. Píši záměrně "běžným způsobem", protože pomocí jistých triků můžeme vložit na CoolBar třeba i Menu. Ostatně i hlavní menu ve zmiňovaném Wordu je součástí CoolBaru, takže je jasné, že "nějak" to jít musí. O tom, jak to udělat a například také jak přidávat komponenty do CoolBaru dynamicky až za běhu aplikace, si povíme zase někdy příště.

A na úplný závěr ještě jedna drobná poznámka. CoolBar je systémová komponenta Windows, takže je závislá čistě na systému, který používáte a na verzi knihovny comctl32.dll, ale pokud se podíváte na paletu komponent (záložka Additional), najdete zde ještě ControlBar, což je nativní VCL komponenta Delphi, která má obdobnou funkčnost. I na ní se možná někdy v budoucnu podíváme blíže, ale věřím, že experimentováním a zkoušením různých nastavení v praxi získáte řadu zkušeností sami.