RAD Studio 10 Seattle a Windows 10 (část 3.)
Windows 10 jsou univerzálním systémem, který by měl být dobře použitelný jak na stolních tak přenosných zařízeních. Z obou světů se snaží nabídnout uživatelům jednak to nejlepší a jednak to, na co jsou uživatelé zvyklí. Na stolní počítače tak proniklo například centrum akcí, které jsem zmiňoval minule.Centrum sdílení
Další podobnou funkcionalitou převzatou z "mobilního světa" je zjednodušení nejběžnějších uživatelských postupů (workflow). Ta byla zřejmě motivována snahou do jisté míry kompenzovat absenci klávesnice a myši u telefonů a tabletů, výrazně zpříjemnit práci však může i na PC. Vytvoříme-li v aplikaci nějaký obsah (data, obrázky, multimédia) a potřebujeme jej předat jinému programu, stačí zvolit možnost sdílet a vybrat aplikaci, které jej chceme předat. Odpadá tak nutnost na tabletu ne úplně pohodlného "copy - paste" nebo uložení a import souboru.RAD Studio 10.x umožňuje rozšířit aplikace o sdílení obsahu za pomoci nové komponenty "Sharing Contract". Některé časté operace tak lze podstatně zjednodušit, což ocení i uživatelé, kteří Windows 10 provozují na zařízeních bez dotykové obrazovky.
Sdílení obsahu mezi aplikacemi zajišťuje operační systém, v tomto případě Windows 10. Aplikace musí vytvořit v požadovaném tvaru "balíček dat" a odkaz na něj odeslat správci sdílení. Ten nabídne uživateli seznam cílových aplikací, které jsou registrovány a umí v balíčku obsažená data zpracovat.
Komponenta "Sharing Contract" výše uvedené kroky "zapouzdřuje" a zjednodušuje tak jejich implementaci.
Delphi
Prvním krokem je vytvoření datového balíčku:
sc.ApplicationName := 'SCDemo';
sc.PackageName := 'SCDemoBalicek';
sc.DataTitle := 'Data sdílená aplikací SCDemo';
Následně je třeba balíček naplnit daty:
sc.DataTitle := 'SCTestData';
sc.IconFile := 'embfavicon.ico';
sc.LogoFile := 'delphi_red.png';
sc.ImageFile := 'eso.bmp';
sc.DataText := 'Nějaký zajímavý text';
sc.RtfText := 'Text ve formátu RTF';
sc.HTML = '<h1>HTML kód<h1>';
sc.WebAddress = 'http://www.embt.cz';
Nakonec balíček publikujeme, čímž je zároveň aktivován správce sdílení Windows 10:
sc.InitSharing;
C++Builder
sh->ApplicationName = "SCDemo";
sh->PackageName = "SCDemoBalicek";
sh->Description = "Data sdílená aplikací SCDemo";
sh->DataTitle = "SCTestData";
sh->IconFile = "embfavicon.ico";
sh->LogoFile = "cpp_red.png";
sh->ImageFile = "eso.bmp";
sh->DataText = "Nějaký zajímavý text.";
sh->RtfText = "Text ve formátu RTF";
sh->HTML = "<h1>HTML kód<h1>";
sh->WebAddress = "http://www.embt.cz";
sh->InitSharing();
Relative panel
Další novou komponentou, která ve VCL pro podporu Windows 10 přibyla je RelativePanel. Můžeme jej využít všude tam, kde je třeba přizpůsobit rozmístění či velikost prvků velikosti obrazovky. RelativePanel slouží jako kontejner, do kterého lze umisťovat další vizuální komponenty. Na jednotlivé komponenty lze následně odkazovat pomocí indexu, který jim byl v rámci kolekce přiřazen a stanovit jejich polohu vůči jiné komponentě nebo panelu samému. Možnosti jsou:Delphi
Zarovnání k pravému, levému, hornímu nebo spodnímu okraji komponenty RelativePanel:
rp.ControlCollection[0].AlignLeftWithPanel := True;
Přichycení nad, pod, zleva nebo zprava k určené komponentě:
rp.ControlCollection[5].RightOf := Label1;
Horizontální nebo vertikální vystředění vzhledem ke komponentě RelativePanel:
rp.ControlCollection[9].AlignHorizontalCenterWithPanel := True;
Horizontální nebo vertikální vystředění vůči určené komponentě:
rp.ControlCollection[7].AlignVerticalCenterWith := Label2;
Pozor! Komponenta "RelativePanel" nehlídá možné křížové závislosti nebo protichůdné požadavky. Je proto vhodné ošetřit, aby nedošlo k například k překrytí ovládacích prvků nebo třeba k jejich posunutí mimo formulář.
Rozteč, tedy vzdálenost mezi prvky lze kontrolovat definováním okrajů jednotlivých prvků:
label1.Margins.Left := 20;
Info: Okraje (Left|Right|Top|Bottom) jsou přednastaveny na hodnotu 3.
C++Builder
rp->ControlCollection->Items[0]->AlignLeftWithPanel = True;
rp->ControlCollection->Items[0]->RightOf = Shape1;
rp->ControlCollection->Items[1]->AlignHorizontalCenterWithPanel = True;
rp->ControlCollection->Items[0]->AlignVerticalCenterWith = Shape1;
rp->ControlCollection->Items[1]->AlignLeftWithPanel = False;
label1->Margins->Left = 20;
ActivityIndicator
ActivityIndicator je náhradou za staré dobré "přesýpací hodiny". Protože umožňuje nastavení řady parametrů, vytvořila pro ně společnost Embarcadero samostatnou komponentu. Nastavit lze:Delphi
// Barvu Indikátoru
ActivityIndicator.IndicatorColor := aicBlack;
ActivityIndicator.IndicatorColor := aicWhite;
// Vzhled (typ) Indikátoru
ActivityIndicator.IndicatorType := aitSectorRing;
ActivityIndicator.IndicatorType := aitMomentumDots;
ActivityIndicator.IndicatorType := aitRotatingSector;
// Velikost Indikátoru
ActivityIndicator.IndicatorSize := aisSmall; //24 x 24 pixelů
ActivityIndicator.IndicatorSize := aisMedium; //32 x 32
ActivityIndicator.IndicatorSize := aisLarge; //48 x 48
ActivityIndicator.IndicatorSize := aisXLarge //64 x 64
// Rychlost animace
ActivityIndicator.FrameDelay := 30;
// Spuštění/ukončení animace
ActivityIndicator.Animate := True;
ActivityIndicator.Animate := False;
C++Builder
ActivityIndicator->IndicatorColor = aicBlack;
ActivityIndicator->IndicatorType = aitSectorRing;
ActivityIndicator->IndicatorSize = aisSmall;
ActivityIndicator->FrameDelay = 30;
ActivityIndicator->Animate = True;
ToggleSwitch
Komponenta Toggle Switch je vhodnou alternativou ke komponentě CheckBox. Odhlédneme-li od vzhledu, je její hlavní předností použití na dotykových zařízeních, protože lze nastavit její velikost a lze ji tak pohodlně obsluhovat i "tlustými prsty".Delphi
if TSAnimate.State = tssOn then
ActivityIndicator.Animate := True;
else
ActivityIndicator.Animate := False;
C++Builder
if (TSAnimate->State == tssOn)
ActivityIndicator->Animate = True;
else
ActivityIndicator->Animate = False;
SearchBox
SearchBox je tvořen kombinací dvou v Delphi či C++Builderu běžně používaných komponent kterými jsou edit box a klasické tlačítko. Podle zvoleného nastavení může komponenta reagovat na stisk tlačítka (ikony) nebo na klávesu Enter. V obou případech je vyvolána událost "OnInvokeSearch".Delphi
// Inicializace vyhledávacího políčka
procedure TForm1.SearchBox1Enter(Sender: TObject);
begin
SearchBox1.Text := '';
end;
procedure TForm1.SearchBox1InvokeSearch(Sender: TObject);
begin
ShowMessage('Vyhledávám ' + SearchBox1.Text + ' ...');
// kód pro realizaci vyhledávání
end;
C++Builder
void __fastcall TForm1::SearchBox1Enter(TObject *Sender)
{
SearchBox1->Text = "";
}
void __fastcall TForm1::SearchBox1InvokeSearch(TObject *Sender)
{
ShowMessage("Vyhledávám " + SearchBox1->Text + " ...");
}
K tomuto článku je k dispozici videotutoriál:
Žádné komentáře:
Okomentovat