|
|
Outlook programozása Delphi-ből
Office 12. rész
|
|
Példaprogram letöltése
40180 bájt
|
Az Office cikksorozatban eddig a Word és az Excel alkalmazások programozásával foglalkoztunk. Most rátérünk a Microsoft Outlook programozásának ismertetésére, amiből megtudhatjuk majd, hogy hogyan kérdezhetjük le és hogyan küldhetünk e-mail-eket, hogyan érhetjük el és módosíthatjuk a címlistát, valamint hogyan kezelhetjük a határidőnaplót.
Azt nem árt tisztázni már az elején, hogy ehhez is szükségünk lesz egy Type Library-ra. Aki figyelmesen végigolvasta az Office programozásáról szóló cikksorozatot annak a Type Libary generálása már nem okozhat gondot. Ha ez megtörtént, akkor neki is kezdhetünk az Outlook programozásának.
Mivel a kapcsolat létesítése itt is ugyanúgy történik, mint a Word és az Excel esetében, ezért kezdhetjük mindjárt egy "komolyabb" program készítésével. A feladat az lesz, hogy lekérdezzük a "Beérkezett üzenetek" mappában lévő leveleink listáját, és a kiválasztott üzenet szövegét megjelenítjük egy TRichEdit komponensben.
A csatlakozás az Outlook-hoz a már feltehetőleg jól ismert módon történik:
var
Foutlook: OleVariant;
…
procedure TForm1.Connect;
begin
FOutlook:=CreateOleObject('Outlook.Application');
end;
Innentől aztán bonyolódik a helyzet! Elsődleges feladatunk az, hogy a "Beérkezett üzenetek" mappában lévő leveleinket beolvassuk, és megjelenítsük azokat egy ListView komponensben. Ezt mindjárt a program indításakor elvégezhetjük, ezért a Form1 OnCreate eseményét használjuk fel erre a célra:
Meghívjuk a Connect metódust, ami elvégzi a csatlakozást (lásd fent).
Szükségünk lesz egy NameSpace objektumra, amit a GetNameSpace függvénnyel kérdezhetünk le. Ennek a függvénynek egy sztring paramétere van, ami minden esetben "MAPI" kell, hogy legyen!
FNamespace:=FOutlook.GetNameSpace('MAPI');
A NameSpace objektum GetDefaultFolder függvénye segítségével megkaphatjuk a beérkezett leveleinket tartalmazó mappa objektumát. A függvény paramétere azt a mappát azonosítja, amit el szeretnénk érni. A mappa azonosítóját egy OlDefaultFolders típusú konstanssal lehet megadni, melynek értékei a következők lehetnek: olFolderCalendar (9), olFolderContacts (10), olFolderDeletedItems (3), olFolderDrafts (16), olFolderInbox (6), olFolderJournal (11), olFolderNotes (12), olFolderOutbox (4), olFolderSentMail (5), vagy olFolderTasks (13).
FFolder:=FNamespace.GetDefaultFolder(olFolderInbox);
Az FFolder objektum Items property-je egy TStringList osztályhoz hasonlóan tartalmazza a mappa tartalmát. Az Items.Count property megadja, hogy a lista hány elemet tartalmaz. Az Items(index) függvénnyel megkaphatjuk az index sorszámú elemet. Nincs más dolgunk, mint végighaladni a listán, és az FMailItem változóba lekérdezni az i. sorszámú levelünk objektumát. Ezután ebből kiolvasható minden szükséges adat, amit meg is jelenítünk egy ListView komponensben:
for i:=1 to FFolder.Items.Count do begin
FMailItem:=FFolder.Items(i);
li:=ListView1.Items.Add;
li.Caption:=FMailItem.SenderName;
li.SubItems.Add(FMailItem.Subject);
li.SubItems.Add(FMailItem.ReceivedTime);
end;
end;
A következő feladat az, hogy a ListView-ben kiválasztott üzenet szövegét megjelenítsük egy RichEdit komponensben. Ezt a funkciót a ListView OnSelectItem eseményénél valósítjuk meg.
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem; Selected: Boolean);
var
FNamespace, FFolder, FMailItem: OleVariant;
begin
Először is ellenőrizzük, hogy van-e kiválasztott elem a ListView-ben. Ezt egyszerűen az Assigned függvény segítségével tehetjük meg.
if Assigned(ListView1.Selected) then begin
Itt egy ismerős rész következik, a NameSpace és a FFolder objektum lekérdezése:
FNamespace:=FOutlook.GetNamespace('MAPI');
FFolder:=FNamespace.GetDefaultFolder(olFolderInbox);
A következő rész szintén az előző eljárásból lehet ismerős, de itt egy kicsit más formában alkalmazzuk. A kiválasztott ListItem Index property-jét fogjuk felhasználni az üzenet azonosítására, vagyis ezt adjuk meg az Items függvénynél index-nek úgy, hogy még 1-et hozzáadunk. Azért kell 1-et hozzáadni, mert míg a ListView-nél 0-tól, addig a MailItem objektumban 1-től vannak sorszámozva az elemek. Az így megkapott MailItem objektum body property-jéből kiolvasható az üzenet szövege.
Ha nincs kiválasztott eleme a ListView-nek, akkor töröljük a RichEdit tartalmát.
FMailItem:=FFolder.Items(ListView1.Selected.Index+1);
RichEdit1.Text:=FMailItem.Body;
end else RichEdit1.Clear;
end;
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 389. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|