Első lépés, hogy el kell készítenünk a dolgozók adatait tartalmazó adatbázist. Egyetlen Paradox 7 típusú adattáblát használunk, az alábbi rekordszerkezettel.
| Mezőnév |
Típus |
Méret |
Jelentése |
| EID * |
Autoincrement |
|
Rekordazonosító a táblában |
| EName |
Alpha |
100 |
Név |
| PostalCode |
Alpha |
4 |
Irányítószám |
| City |
Alpha |
50 |
Település |
| Address |
Alpha |
100 |
Utca, házszám. |
| Email |
Alpha |
50 |
E-mail cím |
A Webes alkalmazás elkészítéséhez az IntraWeb-et használjuk. Új alkalmazás kezdéséhez válasszuk a File – New – Other menüpontot, majd az IntraWeb palettáról a Stand Alone Application elemet. Adjuk meg az alkalmazás könyvtárát, majd kattintsunk az OK gombra.
Ha Com objektumokat akarunk használni egy IntraWeb-es alkalmazásban, akkor az IWServerController objektum, ComInitialization property-jét át kell állítanunk ciNormal-ra.
Az adattáblához a szokásos módon, egy TTable és egy TDataSource segítségével kapcsolódhatunk. A tábla adatainak megjelenítéséhez az IW Data paletta, IWDBGrid komponensét használjuk.
Itt is a DataSource property szolgál arra, hogy a komponenst az adattáblához kössük. Azonban a TTable komponensben nem állíthatjuk be a mezők megjelenítési neveit, ezt most másképp kell megoldanunk.
Az IWDBGrid1 komponens OnRenderCell eseményében van lehetőségünk a megjelenő cellák formázására.
procedure IWDBGrid1RenderCell(ACell: TIWGridCell; const ARow, AColumn: Integer);
Az ACell paraméter a cella adatait tartalmazza. A cella koordinátáit az AColumn (oszlop) és ARow (sor) paraméterekből tudhatjuk meg. Az oszlopok és sorok indexelése 0-val kezdődik.
Az ACell.Text tagján keresztül lekérdezhetjük vagy beállíthatjuk az adott cellában megjelenítendő szöveget.
Használhatunk HTML utasításokat is, ezek természetesen vezérlő funkcióval bírnak, így nem jelennek meg a szövegben, csak a hatásukat érzékelhetjük.
Az IWDBGrid-et nem használhatjuk szerkesztésre. Minden adata statikus. Ha viszont HTML utasításokat használunk, akkor az e-mail címeket könnyedén linkké varázsolhatjuk.
if (AColumn=5) and (ARow>0) then
ACell.Text:='<a href="mailto:'+ACell.Text+'">'+ACell.Text+'</a>';
A táblázat utolsó mezőjében megjelenítjük az adott személy állapotát a Messenger programban. Ehhez szükségünk van egy újabb mezőre az adattáblában, amely nem létezik fizikailag. Egy számított mezőt alkalmazunk.
Ha duplán kattintunk a Table1 objektumon, megjelenik a mezőszerkesztője. Itt a jobb egér gomb lenyomásával megjeleníthetünk egy gyorsmenüt. Válasszuk az Add all fields menüpontot, ezáltal a szerkesztőben megjelenik a tábla összes fizikai mezője.
Ismét hívjuk elő a gyorsmenüt, majd válasszuk New field menüpontot.
A megjelenő ablakban egy újabb, logikai mezőt hozhatunk létre.
A Name mezőbe írjuk a Messenger nevet, ez lesz a mező neve. A mező típusa (Type) legyen String, mérete (Size) pedig 20. A FieldType-nál válasszuk a Calculated lehetőséget, majd kattintsunk az OK gombra.
A mező értékének beállításáról nekünk kell gondoskodnunk, a Table1 objektum, OnCalcFields eseményében.
procedure Table1CalcFields(DataSet: TDataSet);
A DataSet paraméteren keresztül férhetünk hozzá az adatforráshoz. Az esemény minden egyes rekord esetén meghívásra kerül.
Az eseményt kezelő eljárásban megnyitjuk a Messenger programot, majd meghatározzuk az adott felhasználó állapotát.
A Messenger program használatához a uses listában soroljuk fel a Messenger_TLB unit nevét.
A Messenger-hez az alábbi módon csatlakozhatunk.
MsgrObject:=TMsgrObject.Create(Nil);
Az adatokat csak akkor kell lekérdeznünk, ha a program aktív, azaz nincs MSTATE_OFFLINE állapotban.
if MsgrObject.LocalState=MSTATE_OFFLINE then
DataSet.Fields[6].Value:='Nem elérhető'
else begin
...
A felhasználók listáját a List[0] property-n keresztül kérdezhetjük le. Ez egy kollekció, ImsgrUsers típussal.
Users:=MsgrObject.List[0];
A kollekció egy eleméhez, azaz egy felhasználóhoz, az IMsgrUser interfészen keresztül férhetünk hozzá.
Ellenőriznünk kell, hogy az adott felhasználó fel van-e egyáltalán véve a partnerek közé.
Ha igen, akkor lekérdezhetjük jelenlegi állapotát.
case User.State of
MSTATE_OFFLINE: DataSet.Fields[6].Value:='Nem elérhető';
MSTATE_ONLINE: DataSet.Fields[6].Value:='Elérhető';
...
Az eljárás végén felszabadítjuk az MsgrObject objektumot.