Bizonyára sokatok látta/próbálta már a Microsoft új operációs rendszerét, a Vista-t. Egyik nagyon hasznos újítása a Vista Sidebar, melyre mindenféle kütyüket, Gadget-eket lehet pakolászni. A következő képen kicsit csaltam, lepakoltam pár Gadget-et a Sidebar-ról az asztalra, így nem egymás alatt vannak.
Megmondom őszintén, én rögtön kikapcsoltam a Sidebar-t, mikor először feltettem az RC2-t, nem láttam benne fantáziát. Hülye voltam. Mikor leesett, hogy 'hé, hát ilyen kis kütyüket én magam is összemonyákolhatok', rögtön izzítottam is az ercékettőt meg a Google-t, s megpróbálkoztam a dologgal.
Ebben a cikkben a Gadget-hegesztés alapjait szeretném bemutatni, hátha valaki kedvet kap hozzá. Tuljdonképpen mik is azok a Gadget-ek? Milyen nyelven lehet őket írni? Nagyon egyszerű. Ezek kis html-oldalak, megspékelve JavaScript-tel, vagy VBScript-tel, ízlés szerint fűszerezve CSS-szel. Szóval aki járatos a html-oldalak készítésében, annak nem lesz nagy ördöngősség a Gadget-készítés sem. Most, hogy már tudjuk, mivel is van dolgunk, kezdjünk neki!
Először is szükségünk lesz egy mappára, melynek neve '.gadget' -re végződik. Ezt a mappát a megfelelő könyvtárba kell pakolászni, ami a %userprofile%\AppData\Local\Microsoft\Windows Sidebar\Gadgets (%userprofile% = az aktuális felhasználó mappája). Szóval, másszunk oda, és kreáljunk mondjuk egy guess.gadget mappát. Micsodaaa? Guess.gadget? Mééééér'? Ja, ezt elfelejtettem mondani.. A gadget, amin bemutatom az alapokat, egy számkitalálós játék lesz, innen a név.
A továbbiakban az előbb létrehozott könyvtárban fogunk dolgozni, mindent oda kell menteni. Ahhoz, hogy egy Gadget működjön, legalább két file-ra van szükség:
- egy manifest file, melynek neve mindig gadget.xml. Ez információkat tartalmaz a Gadget-ről.
- egy .html file, mely maga a Gadget.
Notepad indít, a következő XML-kódot bekopiz:
<?xml version=''1.0'' encoding=''utf-8'' ?>
<gadget>
<name>GuessGame</name>
<version>1.0</version>
<author name=''Tamás Szakály'' />
<copyright>2006</copyright>
<description>A simple 'guess-a-number' game</description>
<icons>
<icon src=''..\\GuessGame.png'' width=''96'' height=''96'' />
</icons>
<hosts>
<host name=''sidebar''>
<base type=''HTML'' apiVersion=''1.0.0'' src=''GuessGame.html'' />
<permissions>full</permissions>
<platform minPlatformVersion=''1.0'' />
</host>
</hosts>
</gadget>
Ez az XML file nagyjából egyértelmű, infókat adhatunk meg kreálmányunkról, és még ikont is beállíthatunk neki. Ezek a Gadget-választóban fognak megjelenni. A <hosts> rész minden Gadget-nél ugyanez, kivéve a <base> tag src tulajdonságát. Ebben a fő html file-t kell megnevezni. Miután minden infot kitöltöttünk, mentsük el a file-t gadget.xml néven, és figyeljünk rá, hogy UTF-8 kódolást használjunk, illetve a kiterjesztés .xml legyen, ne xml.txt!
Itt az idő, hogy elkészítsük a fő html file-t. A számkitalálós játék lényege, ha esetleg valaki nem tudná miről is van szó: a gép választ egy számot 0 és egy adott érték közt, nekünk pedig ki kell találni. A gép minden egyes találgatás után megmondja, hogy a választott szám kisebb vagy nagyobb-e annál, amit tippeltünk. Persze ha eltaláltuk, azt is kiírja
Ehhez szükségünk van a következő dolgokra a mini-weblapon:
- egy szövegdoboz, amibe a tippet pötyögjük
- egy 'bevitel' gomb, amivel a tippünket érvényesítjük
- egy 'új játék' gomb
- valami felület, ahol a játék kommunikál velünk.
Ezeknek a kívánalmaknak a következő html file tökéletesen megfelel:
<html>
<head>
<meta http-equiv=''Content-Type'' content=''text/html;'' />
<title>GuessGame</title>
<style>
body
{
width:135;
height:200;
background: url(''gg_bg.png'');
}
</style>
<script>
System.Gadget.settingsUI = ''Settings.html'';
System.Gadget.onSettingsClosed = SettingsClosed;
function SettingsClosed()
{
NewGame();
}
function NewGame()
{
response.innerText = '''';
guess.innerText = '''';
var maxNumber = System.Gadget.Settings.read(''maxNumber'');
if (maxNumber == '''')
{
maxNumber = 1000;
System.Gadget.Settings.write(''maxNumber'', maxNumber);
}
pick = Math.floor(Math.random()*maxNumber);
title.innerText = ''I've picked a number between 0 and '' + maxNumber +
''. Try, and guess it!'';
}
function CheckGuess()
{
if(guess.value == pick)
{
response.innerText = ''Congratulation!'';
}
else if(guess.value > pick)
{
response.innerText = ''The number I picked is lower.'';
}
else
{
response.innerText = ''The number I picked is higher.'';
}
}
</script>
</head>
<body onload=''NewGame()''>
<center>
<span id=''title'' style=''font-family: Tahoma; font-size: 8pt;''>
</span>
<br /><br />
<input type=''text'' size=''12'' id=''guess''/>
<br />
<input type=''button'' value='' Guess '' onclick=''CheckGuess()'' />
<input type=''button'' value=''New game'' onclick=''NewGame()'' />
<br />
<br />
<span id=''response'' style=''font-family: Tahoma; font-size: 8pt;''>
</span>
</center>
</body>
</html>
Magát a html-t nem szeretném túlmagyarázni, nem igazán ez a célja az irománynak. És hát igazából nem is nagyon értek a html-hez, meg a JavaScript-hez. Ezért is örvendek, hogy a Gadget-ek is használhatnak ActiveX ojjektumokat - erről talán egy későbbi cikkben ejtek szót. Azért van egy pár sor a kódban, ami magyarázatra szorul:
Minden Gadget-nek lehet egy 'beállítások' lapja. Az ezt tartalmazó html file-t a System.Gadget.settingsUI = ''Settings.html''; sorral adom meg. A System.Gadget.onSettingsClosed = SettingsClosed; sorral pedig meg lehet adni egy függvényt, mely a beállítások oldal bezárása után fut le.
Ha már így szóba jöttek a Gadget beállításai, essen róluk is pár szó. A beállítások tulajdonképpen változónév-érték párosok, melyek a Gadget minden egyes példányára külön vannak tárolva. Így lehet pl. több különböző időzónára állított órád is a Sidebar-on. Ennek egyetlen hátránya, hogy a beállítások a Gadget zárásakor tölődnek.
Hogy is lehet ezeket használni? A Gadget API Settings.write, illetve Settings.read függvényeivel lehet tárolni, illetve visszaolvasni a beállításokat. Erre példa a következő sor:
var maxNumber = System.Gadget.Settings.read(''maxNumber'');
Itt a maxNumber nevű változóba olvassuk a ''maxNumber'' nevű beállítás értékét.
Ahogy már említettem, minden Gadget-nek lehet egy beállítások oldala. Készítsünk most egyet a mini játékunkhoz! A gép által választott szám maximumát tudjuk majd itt beállítani. Ez is egy teljesen átlagos html-oldal:
<html>
<head>
<style>
body
{
width:250;
height:50;
}
</style>
<script>
function init()
{
var maxTextBox = document.getElementById(''max'');
var currentSetting = System.Gadget.Settings.read(''maxNumber'');
if (currentSetting != '''') maxTextBox.innerText = currentSetting;
}
System.Gadget.onSettingsClosing = SettingsClosing;
function SettingsClosing(event)
{
var maxTextBox = document.getElementById(''max'');
if (event.closeAction == event.Action.commit)
{
maxNumber = maxTextBox.value;
System.Gadget.Settings.write(''maxNumber'', maxNumber);
}
event.cancel = false;
}
</script>
</head>
<body onload=''init();''>
<form>
Picked number's maximum:
<input type=''text'' id=''max'' size=''6''>
</form>
</body>
</html>
Így fog kinézni a beállítások lap:
Mint láthatjátok, itt is használom a Gadget API-t. Nem nehéz kitalálni, hogy az onSettingsClosing eseménynek megadott függvény a beállítások lap zárásakor fut le. Ebben az if (event.closeAction == event.Action.commit) sorral megvizsgálom, hogy az OK gombot nyomták-e meg; ha igen, elmentem a beállításokat, ha pedig nem, akkor csak simán bezáródik az oldal.
Nagyjából ennyi lenne, kész is van életünk első Vista Gadget-je Valami ilyesmit kell látni, ha hozzáadjuk a Sidebar-hoz:
Remélem azért nem volt nagyon unalmas, és talán még valaki kedvet is kap a dologhoz. Kritikákat, észrevételeket, kérdéseket természetesen szívesen fogadom. Végezetül pár link a témával kapcsolatos oldalakhoz:
Sidebar Gadget Development MSDN forum: [link]
Sidebar Gadget Development Overview: [link]
Creating Gadgets (Technet): [link]
Gyorskeresés
Gadget Vista Sidebar-hoz
Bizonyára sokatok látta/próbálta már a Microsoft új operációs rendszerét, a Vista-t. Egyik...
[ ÚJ TESZT ]
Percről percre
-
Gray Zone Warfare - Napokon belül kiderül, hogy mikor indul a korai hozzáférés
A jelentések szerint a zárt tesztek sikeresek voltak, hamarosan még többen belevethetik magukat a programba.
-
SMITE 2 - Napokon belül indul a zárt alfa teszt
Több mint egy tucat karaktert próbálhatnak ki a szerencsésebbek, a teljes listát a május első napján esedékes streamben árulják el.
-
Premier előzetesen a Demon Slayer -Kimetsu no Yaiba- Sweep the Board!
Elérhető lett Switch-re a játék, amely leginkább a Mario Party-hoz hasonlítható.
-
VR játék lesz az Alien: Rogue Incursion
Az év végén érkező program PC-re, Meta Quest 3-ra és PlayStation VR2-re érkezik a tervek szerint.
-
Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
Továbbra is szeptemberi premierrel számolnak a fejlesztők, reméljük több halasztásra már nem kell számítanunk.
-
Ülésezik a hardveregylet
Az irodai készülékek és monitorok társaságát egy ház, egy egér és egy DAC egészíti ki.
-
Kínai Neuralink, majom
A mindezt lehetővé tévő Neucybert a Neuralink kínai riválisa, a Beijing Xinzhida Neurotechnology fejlesztette ki.
-
EV-kölcsönzés, bukó
Küszködik az EV-kölcsönzés miatt a Hertz Global, még több EV-t adnak el.
-
Streamingjövő: reklám?
A jobb célzott hirdetések érdekében adatplatformot indít a Warner Bros Discovery.
-
A Google és a találatok
A titkosított levelezést kínáló Tuta Mail arra panaszkodik, hogy a DMA bevezetése óta szinte eltűntek a Google keresőjéből.
-
Cisco-botrány, hoppá
A Cisco azt mondja, hogy a hackerek átjutottak a biztonsági eszközein, és a kormányok hálózatain keresztül kémkedtek, az ügy globális kiterjedésű.
-
Motorola Moto G24 Power teszt
Nagy az aksi, gyenge a hardver, amiből hosszú üzemidőre lehetne következtetni. Tényleg így van?