Archívum

Archive for 2012. december

“Kaptam a minap egy levelet” – Azure Team…

2012. december 28. péntek 3 hozzászólás

No! Én sose voltam jó se fogalmazásból, se helyesírásból de most úgy érzem picit én is fricskázhatok. Kaptam egy levelet a Windows Azure Team-től, és ez annyira jól sikerült, hogy muszá(pontoselipszilonosjé) megosztanom veletek.

Tisztelt Ügyfelünk!

Azért vesszük fel Önnel a kapcsolatot, hogy biztosíthassuk, megfelelő támogatási lehetőségekkel rendelkezzen a támogatási igényeinek jövőbeni kielégítéséhez.

A múlt hónapban bejelentettük a Windows Azure támogatási modelljének változásait. Annak érdekében, hogy az ügyfeleink könnyedén áttérhessenek az új folyamatra, a Microsoft díjmentes Standard szintű támogatást biztosít 2012. 12. 31. napjáig. Most, hogy már 12. hó van, reméljük, elég ideje volt annak biztosítására, hogy megfelelő támogatási lehetőségekkel rendelkezzen a támogatási igényeinek jövőbeni kielégítéséhez

A Google (akarom mondani) Bing translate még nincs a helyzet magaslatán.

De komolyan, engem az se zavar, ha helyesírási hibák vannak benne (legalább látszik, hogy dolgoztak vele) de ez azért ciki.

A levél:

image

Kategóriák:Azure, fun Címkék: ,

Keresés – Search Contract

2012. december 21. péntek 2 hozzászólás

A Windows 8-ban a keresés funkció új dimenziókat nyit meg a fejlesztők számára. Ugyanis most már nem a start menü kereső mezője segítségével keresünk, hanem a Charm Bar lesz a társunk ebben a feladatban. Ráadásul nemcsak a fájlrendszeren tudunk keresni, hanem az alkalmazásunkban/alkalmazásokban is. Ahhoz, hogy ez működjön, egy úgynevezett „keresési szerződést” kell kötnünk a rendszerrel. (Maradjunk a Search Contract definíciónál!)

Nézzünk egy egyszerű esetet! A Solution Explorer-ben kattintsunk a Package.appxmanifest fájlra, majd válasszuk ki a Declarations tabfület! Az Available Declarations listából válasszuk ki a Search lehetőséget, és kattintsunk az Add gombra! (A tulajdonságokat most nem töltjük ki.)

image

Mostantól lehetőségünk van az alkalmazásból keresni. Nézzük meg, hogy mi a különbség aközött, ha van Search Contract, illetve ha nincs. A bal oldali képen az látható, ha az alkalmazásunkban nincs Search Contract. Ekkor a „This app can’t be searched” üzenetet kapjuk. Míg ha már van Search Contract, akkor megjelenik az alkalmazásunk neve, és kereshetünk benne. Természetesen a keresés mikéntjét nekünk kell megírnunk.

image image

Ha valamit kerestünk a keresőmezőben, azt az alkalmazásunk App.xaml.cs állományában az OnSearchActivated metódusnál (override), a SearchActivatedEventArgs QueryText tulajdonságával kérdezhetjük le.

protected override void OnSearchActivated(SearchActivatedEventArgs args)
{
    string search = args.QueryText;
}

Megosztás – Share

2012. december 20. csütörtök Hozzászólás

Manapság minden a megosztásról szól. Miért ne oszthatnánk meg az alkalmazásunkban található tartalmat is másokkal? Legyen szó egyszerű szövegről, képről vagy összetett objektumról! Nem hiába található a Charm bar -on megosztás gomb!

Természetesen ehhez is egy jól definiált API áll a rendelkezésünkre. Csakúgy mint a vágólap kezelésnél, itt is a Windows.ApplicationModel.DataTransfer névtér lesz a segítségünkre.

using Windows.ApplicationModel.DataTransfer;

Szükségünk lesz egy DataTrasferManager példányra. Ezt most a konstuktorban hozzuk létre úgy, hogy meghívjuk DataTrasferManager osztály GetForCurrentView metódusát, majd feliratkozunk a DataRequest eseményre.

DataTransferManager dt;
public MainPage()
{
    this.InitializeComponent();
   
dt = DataTransferManager.GetForCurrentView();
    dt.DataRequested += dt_DataRequested;
}

void dt_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
    args.Request.Data.Properties.Title = "Recept könyv";
   
args.Request.Data.Properties.Description = "Somlói galuska – Recept";
    args.Request.Data.SetText("Végy sok tejszínhabot!");
}

A DataRequest esemény törzsében a DataPacake-nek meghatározzuk a címét (Title), leírását (Description), illetve ha csak egyszerű szöveget akarunk átadni, akkor a SetText metódusát hívjuk meg, és ennek átadjuk a tartalmat. Ha a Charm bar -on a Posta menüpontot választjuk ki, akkor a levelünk tárgya a Recept könyv szöveg lesz, míg a levél törzse pedig, az amit a, SetText metódus paramétereként adtunk meg. Figyeljük meg, hogy a Description nem jelent meg sehol! Ez most azért van, mert ez az alkalmazás ezt nem támogatja és nem dolgozza fel. (Saját alkalmazásunk ezt feldolgozhatja)

image

Ha meg szeretnénk jeleníteni a Charm Bar Share menüpontját, ezt a DataTransferManager ShowShareUI metódusával tehetjük meg.

DataTransferManager.ShowShareUI();

Vágólap – Clipboard

2012. december 19. szerda Hozzászólás

Gyakori eset, hogy az alkalmazásunkból valamilyen adatot a vágólapra szeretnénk helyezni, vagy épp onnan betölteni. Természetesen ehhez is megvannak a megfelelő API-jaink, amivel ez egyszerűen lehetséges. Azt viszont fontos szem előtt tartanunk mindig, hogy milyen adatot is szeretnénk mi a vágólapra helyezni vagy épp onnan betölteni. Ugyanis nem mindegy, hogy egyszerű szöveget, HTML dokumentumot vagy épp egy képet szeretnénk a vágólapra helyezni / betölteni. A vágólap használatához a Windows.ApplicationModel.DataTransfer névtérre lesz szükségünk.

using Windows.ApplicationModel.DataTransfer;

A legegyszerűbb az egyszerű szöveg elhelyezése és betöltése a vágólapról. Az alábbi példában egy DataPackage osztályt példányosítunk, amelynek meghívjuk a SetText metódusát. Ennek paraméteréül egy szting szöveget kell adnunk. (Ebben az esetben egy txtMsg textbox Text tulajdonságát adjuk meg számára. Ezt követően a Cliboard SetContent metódusának a korábban létrehozott DataPackage példányt adjuk át.

DataPackage dt = new DataPackage();          
dt.SetText(txtMsg.Text);
Clipboard.SetContent(dt);

A beillesztés legalább ilyen egyszerű. Ehhez a Clipboard GetContent metódusát kell meghívnunk, melynek a visszatérési értéke egy DataPackageView példány. De mielőtt még az adatot beillesztenénk célszerű, megvizsgálni, hogy egyáltalán van-e megfelelő “formátumú” adat a vágólapon. Ha van, akkor a DataPackageView példány (clipboardData) GetTextAsync metódusát kell meghívnunk. Ennek a visszatérési értéke egy sztring. (Ebben a példában egy tbRes nevű TextBlock vezérlőbe íratunk ki.)

DataPackageView clipboardData = Clipboard.GetContent();
if (clipboardData.Contains(StandardDataFormats.Text))
{
    tbRes.Text = await clipboardData.GetTextAsync();
}

Html tartalom elhelyezése és beillesztése ugyanilyen egyszerű. Csak ebben az esetben nem a SetText, hanem a SetHtmlFormat metódust kell meghívnunk, majd a DataPackage-t ugyanúgy, mint korábban, át kell adnunk a Clipboard SetContent metódusának.

DataPackage dt = new DataPackage();          

string htmldoc = @"<!DOCTYPE html>
<html>
<body>
<h1>This is heading 1</h1>
<h2>This is heading 2</h2>
<h3>This is heading 3</h3>
</body>
</html>";

dt.SetHtmlFormat(htmldoc);
Clipboard.SetContent(dt);

A beillesztés hasonló analógiával történik. Ugyanúgy meg kell hívni a Clipboard GetContent metódusát, csak itt az ellenőrzésnél a StandardDataFormats osztály Html tulajdonságát kell átadnunk a Contains metódusnak, hogy ellenőrizzük, hogy tényleg van HTML tartalom a vágólapon. A beillesztés itt természetesen a GetHtmlFormatAsync aszinkron metódussal történik! (Ebben az esetben egy webViewControl nevű WebView vezérlőnek adjuk át a beillesztett HTML tartalmat)

DataPackageView clipboardData = Clipboard.GetContent();
if (clipboardData.Contains(StandardDataFormats.Html))
{

    webViewControl.NavigateToString(await clipboardData.GetHtmlFormatAsync());
}

Természetesen akár képet vagy más összetett objektumokat is elhelyezhetünk a vágólapra. Ezekhez külön speciális metódusok társulnak.

Egy DataPackage-ben akár több adatot is elhelyezhetünk a vágólapra! Például: egyszerre elhelyezhetünk egyszerű szöveget és képet is a váglólapra. A beillesztésnél mondjuk meg, hogy mit szeretnénk beilleszteni: szöveget vagy képet, esetleg rtf dokumentumot stb.

Helyi menü – ContextMenu

2012. december 18. kedd Hozzászólás

Klasszikus értelemben vett helyi vagy más néven context menü nincs a Windows Store alkalmazásoknál. Illetve van, csak nem úgy, mint ahogy azt a fejlesztők nagy része korábban megszokta a Windows rendszereknél. UI szempontból nem a legszerencsésebb a helyi menük használata, de ha úgy döntünk, hogy számunkra ez feltétlen fontos, akkor persze van rá lehetőségünk. Ehhez szükségünk lesz a Windows.UI.Popups névtérre.

using Windows.UI.Popups

Ennek a használatához példányosítanunk kell egy PopupMenu osztályt, majd ennek a Commands gyűjteményéhez hozzá kell adnunk a UICommand-jainkat. A UICommand első paramétere a megnevezés (ez lesz megjelenítve a helyi menüben), a második paramétere pedig egy UICommandInvokedHandler delegate. Itt megadhatjuk inline módon is futtatandó kódjainkat.

PopupMenu menu = new PopupMenu();
menu.Commands.Add(
    new UICommand("Copy", (command) => {
        //Törzs
    }));

menu.Commands.Add(
    new UICommand("Paste", (command) => { 
        //Törzs
    }));

A Popup menü kész, itt az ideje megjeleníteni! Ehhez két metódus is a segítségünkre lehet. Az egyik a ShowAsync, amelynek egy Point objektumot kell átadnunk. Ez a Point objektum mondja meg, hogy a képernyőn hol jelenjen meg a helyi menü. Jelen esetben a bal felső sarokban lesz látható a helyi menü. (X: 1, Y: 1)

menu.ShowAsync(new Point(1, 1));

image

A második helyi menü megjelenítésére használatos metódus a ShowForSelectionAsync, amelynek egy Rect példányt kell átadnunk. (Ezt gyakrabban használjuk.)

menu.ShowForSelectionAsync(new Rect(1, 1, 100, 100));

WebView

2012. december 17. hétfő Hozzászólás

A WebView vezérlő egy olyan egyszerű vezérlő, amelynek segítségével HTML tartalmakat tudunk megjeleníteni az alkalmazásunkon belül. Sőt, akár ha egyszerű szövegbe írunk HTML tartalmat, azt is meg tudja jeleníteni számunkra. A szövegben akár JavaScript is lehet.

A felhasználó felületre dobjunk fel egy TextBox-ot (Name: txtUri), egy Button-t (Content: GO) és egy WebView vezérlőt (Name: webView)! A gomb klikk eseményének törzsébe írjuk a következőket:

Uri resUri = new Uri(txtUri.Text, UriKind.Absolute);
webView.Navigate(resUri);

Ennek az eredménye az, hogy az alkalmazás betölti azt az oldalt, aminek a címét a txtUri mezőbe írtuk.

image

 

De nemcsak meglévő oldalra tudunk ellátogatni. Akár helyileg is létrehozhatunk egy HTML dokumentumot, amit a WebView vezérlőjével megjeleníthetünk. Ebben az esetben a GO gomb klikk eseményének törzsébe írjuk a következőt:

string htmldoc =

@"<!DOCTYPE html>
<html> <body>
<h1>This is heading 1</h1>
<h2>This is heading 2</h2>
<p>This is a paragraph.</p>
</body> </html>";

 

webView.NavigateToString(htmldoc);

A htmldoc egyszerű sztring amiben egy HTML dokumentumot fogalmaztunk meg. (Ebben a dokumentumban akár JavaScript is lehet!) Ezt a sztringet átadjuk a webView NavigateToString metódusának. Ezt követően láthatjuk a HTML oldalunkat a WebView vezérlőben!

image

HttpClient

2012. december 14. péntek Hozzászólás

Nagyon sok alkalmazásnál előfordul az, hogy HTTP-n akar kommunikálni. Legyen szó egy egyszerű weboldal letöltéséről vagy épp REST-es szolgáltatás hívásról. A HttpClient sokat segíthet nekünk. A HTTP műveleteket támogatja (GET – GetAsync(), POST – PostAsync(), PUT – PutAsync(), DELETE – DeleteAsync()), és ezen műveletek segítségével HTTP kéréseket fogalmazhatunk meg. Nézzük meg a legegyszerűbbet, a GET-et! A webes kérések legnagyobb része a GET, és most megnézzük, hogy miként kérjük le egy weboldal teljes tartalmát. Ehhez szükségünk lesz majd a System.Net.Http névtérre.

using System.Net.Http;

A felhasználó felületre dobjunk fel egy TextBox-ot (Name: txtUri), egy Button-t (Content: GET) és egy TextBlock-ot (Name: tbResult)! A gomb klikk eseményének törzsébe írjuk a következőket:

Uri resUri = new Uri(txtxUri.Text, UriKind.Absolute);
HttpClient hClient = new HttpClient();
HttpResponseMessage response = await hClient.GetAsync(resUri);
tbResult.Text = await response.Content.ReadAsStringAsync();

Itt készítünk egy Uri objektumot, aminek a címe az a Http cím, amit a Textboxba beírtunk. (Ha helytelen a cím akkor hibát fogunk majd kapni.) Ezt követően példányosítsuk a HttpClient osztályt, majd hívjuk meg a HttpClient példány GetAsync metódusát. Ennek a metódusnak egy Uri címet kell átadnunk. Mint látható, ez is egy aszinkron metódus, amelynek visszatérési értéke egy HttpResponseMessage. A következő sorban pedig egyszerűen csak kiolvassuk a tartalmát a ReadAsStringAsync metódussal. Az eredmény pedig valami ilyesmi lesz:

image

MessageDialog, avagy a MessageBox utódja

2012. december 13. csütörtök Hozzászólás

A Windows Store alkalmazásoknál nincs MessageBox, mint a WPF-nél vagy a Windows Formsnál. A fejlesztők nagyon szeretik az üzenet ablakokat feldobni, mert gyorsan és egyszerűen tudnak üzenetet küldeni a felhasználói felületre. Ez a lehetőség viszont Windows Store alkalmazásoknál nem így működik. MessageBox osztály nem létezik, helyette viszont van MessageDialog, ami a Windows.UI.Popups névtérben található.

using Windows.UI.Popups;

A MessageDialog használata valamivel összetettebb, mint a MessageBox-é, de cserébe sokkal többet nyújt a feljesztők számára, mint a MessageBox. Nézzünk egy egyszerű példát:

Első példánkban egy üzenetet dobunk fel. Ehhez mindösszesen egy MessageDialog-ot kell példányosítanunk, a megfelelő argumentumokat átadni majd a ShowAsync metódust meghívni.

MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve");
mDialog.ShowAsync();

Ennek az eredménye az alábbi párbeszédablak lesz.

image

Figyeljük meg, hogy egy Close gomb van csak a párbeszédablakban! A MessageBox-ban ezek a lehetőségek korlátozottak voltak. A MessageDialog-nál ez sokkal testreszabhatóbb. Ha új gombokat szeretnénk hozzáadni, akkor a MessageDialog példány Commands gyűjteményéhez kell új UICommand-ot hozzáadnunk. Az alábbi példában egy Igen és egy Nem gombot adunk a felhasználói felülethez.

MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve");

mDialog.Commands.Add(

    new UICommand("Igen"));

 

mDialog.Commands.Add(

    new UICommand("Nem"));

 

mDialog.ShowAsync();

Az eredménye mint látható egy olyan MessageDialog, amelyen van egy Igen és egy Nem gomb.

image

A gombok sorrendje nem más mint, a Commands gyűjteményhez adás sorrendje. Tehát, ha előbb adjuk hozzá a Nem UICommandot, mint az Igent, akkor az lesz a sorrendben elöl.

MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve");

mDialog.Commands.Add(

    new UICommand("Nem"));

 

mDialog.Commands.Add(

    new UICommand("Igen"));

mDialog.ShowAsync();

Az eredmény az alábbi képen látható.

image

Figyeljük meg, hogy ebben az esetben a Nem gomb van kijelölve alapértelmezett gombnak! Ha ezt befolyásolni szeretnénk, akkor a DefaultCommandIndex-szel tehetjük meg az alábbi módon:

MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve");

mDialog.Commands.Add(
    new UICommand("Nem"));


mDialog.Commands.Add(
    new UICommand("Igen"));


mDialog.DefaultCommandIndex = 1;
mDialog.ShowAsync();

Ennek az eredménye a következő MessageDialog lesz:

image

Figyeljük meg, hogy ebban az esetben az Igen gomb van alapértelmezett gombnak beállítva!

Eddig gombokat adtunk a MessageDialoghoz, de funkciókat ezekhez a gombokhoz nem társítottunk.

A következő példában ezt fogjuk megtenni, mégpedig a UICommand létrehozásánál kell megmondanunk, hogy adott gomb megnyomására milyen legyen az alkalmazás viselkedése. Az egyszerűség kedvéért mi most csak egy szövegmezőbe írjuk ki az IGEN vagy a NEM szavakat annak megfelelően, hogy a felhasználó melyikre kattintott!

MessageDialog mDialog = new MessageDialog("Figyelmeztetés!", "Alkalmazás neve");

mDialog.Commands.Add(
    new UICommand("Nem", (command) => {
        //Törzs
        txtInfo.Text = "NEM!";
    }));


mDialog.Commands.Add(
    new UICommand("Igen", (command) =>
    {
        //Törzs
        txtInfo.Text = "IGEN!";
    }));
mDialog.ShowAsync();

Windows Store – Bing Maps API használata

2012. december 12. szerda Hozzászólás

Ebben a feladatban egy Bing Maps térképet fogunk megjeleníteni az alkalmazásunkban. Ne feledjük el a Bing Maps szolgáltatáshoz szükséges előkészületeket megtenni!

A projektünkben kattintsunk a References-re jobb egérgombbal, majd a megjelenő helyi menüből válasszuk ki az Add Reference… menüpontot!

image

A megjelenő Reference Manager ablakban, a Windows alatt kattintsunk az Extension menüpontra! A listából válasszuk ki a Bing Maps for C#, C++, or Visual Basic library-t, és klikkeljünk az OK gombra!

image

Sajnos ebben a pillanatban még nem haszálhatjuk ezt a library-t. Egy sárga felkiáltójel jelenik meg a Bing Maps library mellett.

image

 The processor architecture of the project being built "Any CPU" is not supported by the referenced SDK "Bing.Maps.Xaml, Version=1.0". Please consider changing the targeted processor architecture of your project (in visual studio this can be done through the Configuration Manager) to one of the architectures supported by the SDK: "x86, x64, ARM".

Hogy ezt kiköszöböljük, kattintsunk a BUILD menüponton belül a Configuration Manager… elemre!

image

A megjelenő Configuration Manager ablakban a Platformot állítsuk át most x86-ra! Ezt követően már nekikezdhetünk a munkának.

image

Most már elkezdhetjük a munkát a térképpel. Nyissuk meg a MainWindows.xaml-t! (Vagy azt az oldalt, amiben szeretnénk használni) Az XML névterek közé vegyük fel a Bing.Maps névteret:

xmlns:Maps="using:Bing.Maps"

A térképet a Maps osztály segítségével használhatjuk. A Credentials tulajdonságnál meg kell adnunk azt a kulcsot, amit a Bing Maps portálon kaptunk, hogy használhassuk a Bing Maps térkép szolgáltatást.

<Maps:Map Credentials="AmnrGdyleHvu6FPIsIm_Q0lkQINvY5oeb…">       
</Maps:Map>

Most már használhatjuk a Bing Maps térkép szolgáltatását!

image

Bing Maps – regisztráció

2012. december 11. kedd 1 hozzászólás

Ahhoz, hogy a Bing Maps térképszolgáltatását használjuk, egy Windows Store alkalmazásba előbb ezt a komponenst külön le kell töltenünk. Ezt a komponenst alapértelmezettként nem tartalmazza a Windows Store API. A Bing Maps SDK for Windows Store apps-ot innen tölthetjük le.

image

Letöltés után telepítsük fel!

Ez egy ingyenes SDK, bárki szabadon használhatja (a Bing Maps licencszerződésének megfelelően). De ahhoz, hogy használjuk, szükségünk lesz egy API Key-re, amit ingyenesen igényelhetünk. Látogassunk el a http://www.bingmapsportal.com oldalra, és kattintsunk a Sign in gombra, majd a Windows Live ID–nk (Microsoft Account) segítségével jelentkezzünk be! (Ha még nincs Windows Live ID-nk (Microsoft Account az új neve), akkor ingyenesen létrehozhatunk egyet. Ebben az esetben a New User menüpontot kell választanunk.)

image

A bejelentkezést követően kattintsunk a bal oldali menüsávon található Create or view keys menüpontra!

image

A Create Key alatt adjuk meg az alkalmazásunk nevét, URL-jét (opcionális), a kulcs típusát állítsuk Trial-ra, az Application Type-ot pedig Windows Store app-ra, majd kattintsunk a Submit gombra!

image

Néhány másodpercen belül megjelenik az API Key-nk. Erre szükségünk lesz a fejlesztés során.

image