12. Komponenty NetMasters II

V tΘto kapitole pokraΦuje popis komponent NetMasters. Jsou zde popsßny:


Jednotka NMHttp

Jednotka NMHttp obsahuje komponentu TNMHTTP a t°φdu a typy, kterΘ komponenta pou╛φvß. Je zde pou╛φvßna t°φda THeaderInfo a typy:

T°φda THeaderInfo

T°φda je poskytnuta k usnadn∞nφ pou╛φvßnφ rozhranφ pro p°idßvßnφ nejobecn∞j╣φch prvk∙ hlaviΦky HTTP. Tyto prvky jsou nepovinnΘ a jsou pou╛φvßny z r∙zn²ch d∙vod∙.
T°φda mß nßsledujφcφ vlastnosti:
 
property Cookie: string; Vlastnost obsahuje odchßzejφcφ Cookie, kter² bude odeslßn na vzdßlenΘho hostitele, kdy╛ d∞lßme po╛adavek HTTP. Toto je u╛iteΦnΘ pro nßvrat Cookie d°φve zaslanΘho na stejnΘho hostitele. 
property LocalMailAddress: string; Vlastnost specifikuje e-mail adresu lokßlnφho u╛ivatele, vytvß°ejφcφ po╛adavek HTTP. 
property LocalProgram: string; Vlastnost specifikuje jmΘno lokßlnφ aplikace zasφlajφcφ po╛adavek HTTP.
property Password: string; Vlastnost specifikuje heslo, pokud pro p°φstup k dokumentu na WWW je po╛adovßno. PoskytnutΘ heslo musφ odpovφdat u╛ivateli zadanΘmu ve vlastnosti UserID.
property Referer: string; Vlastnost specifikuje adresu mφsta, kterΘ ukazuje klientu na po╛adovan² dokument. Aplikace tuto vlastnost zφskß z kliknutφ na n∞jakΘ vazb∞ na strßnce, kterou strßnka pou╛φvß k odkazovßnφ na strßnku po╛adovanou vazbou.
property UserId: string; Vlastnost specifikuje identifikaci u╛ivatele, pokud pro p°φstup k dokumentu WWW je po╛adovßno. Identifikace u╛ivatele musφ odpovφdat heslu uvedenΘmu ve vlastnosti Password

Typ CmdType

CmdType = (CmdGET, CmdOPTIONS, CmdHEAD, CmdPOST, CmdPUT, CmdPATCH, CmdCOPY,
          CmdMOVE, CmdDELETE, CmdLINK, CmdUNLINK, CmdTRACE, CmdWRAPPED);
Typ CmdType je pou╛φvßn jako typ provßd∞nΘho p°φkazu HTTP.

Typ TResultEvent

TResultEvent = procedure(Cmd: CmdType) of object;
Typ udßlosti je pou╛it, kdy╛ udßlost pot°ebuje specifikovat p°φkaz HTTP, kter² je provßd∞n.

Komponenta TNMHTTP

Komponenta TNMHTTP je pou╛φvßna pro provßd∞nφ p°enos∙ HTTP ve WWW. Tato komponenta odpovφdß verzi 1.1 HTTP.
Pomocφ metody Get, dokument m∙╛e b²t zφskßn z WWW serveru, metodou Post m∙╛eme dokument odeslat na WWW server, metodou Put dokument m∙╛e b²t vytvo°en na WWW serveru, metodou Delete dokument m∙╛e b²t odstran∞n z WWW serveru, metodou Trace m∙╛eme zobrazit data a hlaviΦku odeslanΘ na vzdßlen² server a metodou Option m∙╛eme zφskat p°φkazy podporovanΘ serverem a specifikovan²m dokumentem.
Komponenta mß tyto vlastnosti:
 
property Body: string; Vlastnost m∙╛e b²t pou╛ita jednφm ze dvou zp∙sob∙: Pokud InputFileMode je true, pak vlastnost Body musφ b²t nastavena na cestu a jmΘno souboru pro ulo╛enφ zφskanΘho dokumentu. Po volßnφ n∞kterΘ metody, kterß zφskßvß dokument z Internetu pomocφ HTTP, soubor specifikovan² touto vlastnostφ bude obsahovat t∞lo zφskanΘho dokumentu. Tato metoda je u╛iteΦnß, kdy╛ zφskßvßme binßrnφ dokumenty, jako soubory WAV, soubory obrßzk∙ a pod. 
Jestli╛e InputFileMode je false, pak Body bude obsahovat t∞lo dokumentu zφskanΘho n∞kterou z metod, kterΘ zφskßvajφ dokumenty pomocφ HTTP. Tato mo╛nost je u╛iteΦnß, kdy╛ zφskßvßme HTML nebo jinΘ textovΘ dokumenty z Internetu pro rozklßdßnφ.
Published Runtime, designtime
property CookieIn: string; Vlastnost obsahuje Cookie zaslan² ze vzdßlenΘho hostitele, pokud byl zaslßn. Vlastnost je nastavovßna pouze po zφskßnφ dokumentu ze sφt∞. Runtime, Read-Only
property Header: string; Vlastnost m∙╛e b²t podobn∞ jako Body pou╛φvßna dvojφm zp∙sobem. Mφsto t∞la dokumentu, ale pojednßvß o hlaviΦce dokumentu. Published Runtime, designtime
property HeaderInfo: THeaderInfo; Vlastnost specifikuje hlaviΦkovΘ informace, kterΘ jsou zaslßny na HTTP server, kdy╛ d∞lßme po╛adavek pro dokument. HlaviΦka zasφlanß na vzdßlenΘho hostitele, kdy╛ je po╛adovßn dokument pomocφ HTTP m∙╛e b²t modifikovßna p°ed odeslßnφm vlo╛enφm dal╣φch polo╛ek modifikacφ vlastnosti SendHeader v obsluze OnAboutToSend Published Runtime, Designtime
property InputFileMode: boolean; Vlastnost urΦuje, jak budou zpracovßny p°ichßzejφcφ dokumenty a jejich hlaviΦky. Viz vlastnosti Body a Header.
property OutputFileMode: boolean; Vlastnost specifikuje jak budou zpracovßny odchßzejφcφ data pou╛itß metodami Post, Put a Trace. P°i nastavenφ na true, data pro tyto metody budou zφskßny z lokßlnφch soubor∙. P°i nastavenφ na false, data pro tyto metody jsou p°edßna jako parametr.
property SendHeader: TExStringList; Vlastnost obsahuje hlaviΦkovΘ informace zasφlanΘ na vzdßlenΘho hostitele, kdy╛ po╛adujeme dokument pomocφ HTTP. Vlastnost m∙╛e b²t modifikovßna v OnAboutToSend p°idßnφm hlaviΦkov²ch informacφ u╛ivatele. Public Runtime only

Komponenta mß nßsledujφcφ metody:

procedure Delete(URL: string); virtual;
Metoda zru╣φ parametrem specifikovan² dokument. Parametr musφ b²t ·pln∞ kvalifikovanΘ URL, vΦetn∞ Φßsti http://, aby tato metoda pracovala sprßvn∞. Musφme mφt p°φstup k modifikaci (zßpisu) soubor∙ na mφst∞, kde soubor chceme zru╣it. Pokud metoda je ·sp∞╣nß, pak je generovßna udßlost OnSuccess s parametrem Cmd s hodnotou CmdDELETE. Kdy╛ metoda je ne·sp∞╣nß, pak je generovanß udßlost OnFailure s hodnotou parametru CmdDELETE. Vlastnost Body bude obsahovat chybn² p°φkaz (kdy╛ dokument nebyl zru╣en) nebo potvrzenφ (kdy╛ soubor byl zru╣en).

procedure Get(URL: string); virtual;
Metoda zφskß dokument specifikovan² parametrem. Pokud InputFileMode je true, pak dokument zφskßvan² metodou Get je ulo╛en do souboru, kter² je specifikovßn vlastnostφ Body a hlaviΦka je ulo╛ena do souboru specifikovanΘho vlastnostφ Header. Pokud InputFileMode je false, pak dokument zφskan² metodou Get je ulo╛en ve vlastnosti Body jako °et∞zec a jeho hlaviΦka je ulo╛ena do vlastnosti Header jako °et∞zec. Pokud metoda je ·sp∞╣nß, pak je generovßna udßlost OnSuccess s parametrem Cmd s hodnotou CmdGET. Kdy╛ metoda je ne·sp∞╣nß, pak je generovanß udßlost OnFailure s hodnotou parametru CmdGET.

procedure Head(URL: string); virtual;
Metoda zφskßvß hlaviΦku dokumentu specifikovanΘho parametrem URL. Pokud InputFileMode je true, pak zφskanß hlaviΦka je ulo╛ena do souboru specifikovanΘho vlastnostφ Header, kdy╛ je false, pak hlaviΦka je ulo╛ena do vlastnosti Header jako °et∞zec. Pokud metoda je ·sp∞╣nß, pak je generovßna udßlost OnSuccess s parametrem Cmd s hodnotou CmdHEAD. Kdy╛ metoda je ne·sp∞╣nß, pak je generovanß udßlost OnFailure s hodnotou parametru CmdHEAD.

procedure Options(URL: string); virtual;
Metoda vracφ p°φkazy podporovanΘ serverem HTTP a dotazovan²m dokumentem. Parametr URL specifikuje mφsto k zφskßnφ voleb. PodporovanΘ p°φkazy jsou specifikovßny ve vlastnosti Header. Prvek hlaviΦky Public specifikuje p°φkazy podporovanΘ serverem HTTP. Prvek hlaviΦky Allow specifikuje p°φkazy podporovanΘ dokumentem specifikovan²m parametrem URL. Pokud metoda je ·sp∞╣nß, pak je generovßna udßlost OnSuccess s parametrem Cmd s hodnotou CmdOPTIONS. Kdy╛ metoda je ne·sp∞╣nß, pak je generovanß udßlost OnFailure s hodnotou parametru CmdOPTIONS.

procedure Post(URL, PostData: string); virtual;
Metoda odesφlß informace specifikovanΘ parametrem PostData na dokument specifikovan² parametrem URL. Pokud vlastnost OutputFileMode je true, pak parametr PostData specifikuje cestu a jmΘno souboru, kter² obsahuje odesφlanß data. Jestli╛e OutputFileMode je false, pak parametr PostData musφ obsahovat odesφlanß data. Pokud metoda je ·sp∞╣nß, pak je generovßna udßlost OnSuccess s parametrem Cmd s hodnotou CmdPOST. Kdy╛ metoda je ne·sp∞╣nß, pak je generovanß udßlost OnFailure s hodnotou parametru CmdPOST.

procedure Put(URL, PutData: string); virtual;
Metoda je pou╛φvßna k vytvo°enφ dokumentu na HTTP serveru. Parametr URL specifikuje vytvß°en² dokument na vzdßlenΘm HTTP serveru. Pokud vlastnost OutputFileMode je true, pak parametr PutData specifikuje cestu a jmΘno souboru, kter² obsahuje data vytvß°enΘho dokumentu. Jestli╛e OutputFileMode je false, pak parametr PutData musφ obsahovat data vytvß°enΘho dokumentu. Aby metoda mohla sprßvn∞ pracovat musφme mφt zßpisovß prßva na hostiteli, kde dokument vytvß°φme. Pokud metoda je ·sp∞╣nß, pak je generovßna udßlost OnSuccess s parametrem Cmd s hodnotou CmdPUT. Kdy╛ metoda je ne·sp∞╣nß, pak je generovanß udßlost OnFailure s hodnotou parametru CmdPUT.

procedure Trace(URL, TraceData: string); virtual;
Metoda vracφ hlaviΦku po╛adavku zaslanou klientem jako t∞lo dokumentu mimo nßvratu dat zaslan²ch v parametru TraceData. Metoda se Φasto pou╛φvß p°i lad∞nφ a hledßnφ problΘm∙ s hostitelem HTTP. Parametr URL specifikuje dokument, kter² byl po╛adovßn. Pokud vlastnost OutputFileMode je true, pak parametr TraceData specifikuje cestu a jmΘno souboru k pou╛itφ jako odeslan²ch dat. Jestli╛e OutputFileMode je false, pak parametr TraceData musφ obsahovat data odeslanß na vzdßlenΘho hostitele jako °et∞zec. Pokud metoda je ·sp∞╣nß, pak je generovßna udßlost OnSuccess s parametrem Cmd s hodnotou CmdTRACE. Kdy╛ metoda je ne·sp∞╣nß, pak je generovanß udßlost OnFailure s hodnotou parametru CmdTRACE.

Komponenta mß nßsledujφcφ udßlosti:

property OnAboutToSend: TNotifyEvent;
Udßlost vznikß p°ed odeslßnφm po╛adavku na vzdßlenΘho hostitele. Umo╛≥uje modifikovat hlaviΦku po╛adavku obsa╛enou ve vlatnosti SendHeader vlo╛enφm polo╛ek hlaviΦek u╛ivatele. Udßlost je generovßna libovolnou metodou zφskßvajφcφ nebo zasφlajφcφ data na vzdßlenΘho hostitele.

property OnAuthenticationNeeded: TNotifyEvent;
Udßlost vznikß, kdy╛ p°φstup k dokumentu vy╛aduje autentizaci. Je nutno nastavit vlastnosti Password a UserID vlastnosti HeaderInfo.

property OnFailure: TResultEvent;
Udßlost nastßvß, kdy╛ operace je ne·sp∞╣nß. Parametr Cmd specifikuje chybujφcφ p°φkaz. Mo╛nΘ hodnoty jsou: CmdGET, CmdOPTIONS, CmdHEAD, CmdPOST, CmdPUT a CmdDELETE.

property OnRedirect: THandlerEvent;
Udßlost nastßvß, kdy╛ dokument p°esm∞ruje klienta na jin² dokument a to na stejnΘm nebo jinΘm hostiteli. Pokud parametr Handled je nastaven na true, pak komponenta neprovede automaticky p°esm∞rovßnφ. Je-li parametr nastaven na false (implicitn∞), pak p°esm∞rovan² dokument je zφskßvßn.

property OnSuccess: TResultEvent;
Udßlost nastßvß, kdy╛ operace je dokonΦena ·sp∞╣n∞.  Parametr Cmd specifikuje dokonΦen² p°φkaz. Mo╛nΘ hodnoty jsou: CmdGET, CmdOPTIONS, CmdHEAD, CmdPOST, CmdPUT a CmdDELETE.


Jednotka NMMSG

Tato jednotka obsahuje komponentu TNMMsg pro zasφlßnφ jednoduch²ch zprßv po Internetu nebo Intranetu a komponentu TNMMsgServ, kterß je pou╛φvßna pro p°φjem zprßv odeslan²ch komponentou TNMMsg. Ob∞ komponenty jsou odvozeny od TPowersock (a TNMMsgServ od TNMGeneralServer).
Hlavnφm v²znamem komponent v tΘto jednotce je poskytnutφ p°φkladu, kter² m∙╛eme pou╛φt jako zßkladnφ t°φdy pro °e╣enφ problΘm∙ se zßkaznick²mi protokoly Internetu.
Je zde takΘ definovßn typ TMSGEvent.

Typ TMSGEvent

type TMSGEvent = procedure(Sender: TComponent; const sFrom, sMsg: string) of object;
Typ je pou╛it pro udßlost OnMSG. Parametr sFrom specifikuje od koho zprßva pochßzφ a parametr sMsg je zprßva samotnß.

Komponenta TNMMsg

Komponenta je pou╛φvßna pro zasφlßnφ jednoduch²ch textov²ch zprßv v Internetu nebo Intranetu pomocφ protokolu TCP/IP. Hostitel, kterΘmu zprßva bude zaslßna musφ b²t b∞╛φcφ server vytvo°en² z komponenty TNMGeneralServer.
K poskytnutφ obousm∞rnΘ komunikace musφme TNMMsg pßrovat s komponentou TNMMsgServ. Pou╛itφ t∞chto komponent vy╛aduje WSOCK32.DLL.
D°φve ne╛ m∙╛eme odeslat zprßvu, musφme nejprve nastavit vlastnost Host na vzdßlenΘho hostitele, kterΘmu budeme zasφlat zprßvu. Musφme takΘ nastavit vlastnost Port na hodnotu odpovφdajφcφ port vzdßlenΘho hostitele. Nastavenφm vlastnosti FromName zajistφme, ╛e p°φjemce zprßvy se dozvφ od koho zprßva pochßzφ. Po nastavenφ t∞chto vlastnostφ, m∙╛eme zaslat zprßvu volßnφm metody PostIt.
Komponenta mß vlastnost
 
property FromName: string; Vlastnost oznamuje p°φjemci od koho zprßva pochßzφ. Published DesignTime, RunTime

metodu

function PostIt(const sMsg: string): string;
Metoda zasφlß zprßvu specifikovanou parametrem na vzdßlenΘho hostitele. Od serveru je vrßceno OK, pokud odeslßnφ je ·sp∞╣nΘ. Pokud zprßva je odeslßna ·sp∞╣n∞, pak vznikß udßlost OnMesageSent.
Vzdßlen² hostitel musφ akceptovat p°ipojenφ, p°ijmout zprßvu a vrßtit OK aby klient se mohl odpojit.

a udßlost

property OnMessageSent: TNotifyEvent;
Udßlost vznikß p°i ·sp∞╣nΘm odeslßnφ zprßvy na vzdßlenΘho hostitele.

Komponenta TNMMsgServ

Komponenta je pou╛φvßna pro p°φjem zprßv od komponenty TNMMsg. Mφsto pou╛φvßnφ komponent TNMMsg a TNMMsgServ se m∙╛eme pokusit o vytvo°enφ svΘho vlastnφho zßkaznickΘho protokolu k °e╣enφ na╣eho problΘmu. Pro pou╛itφ komponenty musφme pou╛φvat WSOCK32.DLL.
P°i v²voji na╣φ aplikace nastavφme vlastnost Port na port, kde nß╣ server bude naslouchat (pokud se li╣φ od implicitnφho). Pro p°φjem a zpracovßnφ zprßvy, zapφ╣eme obsluhu udßlosti OnMSG.

Jednotka NMNNTP

Jednotka obsahuje komponentu TNMNNTP a svßzanou t°φdu a typy. T°φda je TPostRecordType a typy:

Typ TCacheMode

TCacheMode = (cmMixed, cmRemote, cmLocal);
Typ je pou╛it k urΦenφ stylu Φlßnku, kter² bude pou╛it.

Typ TGroupRetrievedCacheEvent

TGroupRetrievedCacheEvent = procedure(var Handled: boolean; name: string;
       FirstArticle, LastArticle: integer; Posting: boolean) of object;
Typ je urΦen pro pou╛itφ udßlostφ OnGrouplistCacheUpdate. Parametr Handled specifikuje zda implicitnφ odklßdacφ akce komponenty mß b²t provedena. Parametr name specifikuje jmΘno diskusnφ skupiny. Parametr FirstArticle specifikuje Φφslo prvnφho Φlßnku v diskusnφ skupin∞. Nenφ to v╛dy 1. Parametr LastArticle specifikuje Φφslo poslednφho Φlßnku v diskusnφ skupin∞. Parametr Posting urΦuje zda odeslan² Φlßnek je poskytnut tΘto diskusnφ skupin∞.

Typ TGroupRetrievedEvent

TGroupRetrievedEvent = procedure(name: string; FirstArticle,
      LastArticle: integer; Posting: boolean) of object;
Typ je pou╛φvßn udßlostφ OnGrouplistUpdate. Parametr name specifikuje jmΘno diskusnφ skupiny. Parametr FirstArticle specifikuje Φφslo prvnφho Φlßnku v diskusnφ skupin∞. Nenφ to v╛dy 1. Parametr LastArticle specifikuje Φφslo poslednφho Φlßnku v diskusnφ skupin∞. Parametr Posting urΦuje zda odeslan² Φlßnek je poskytnut tΘto diskusnφ skupin∞.

Typ THeaderCacheEvent

THeaderCacheEvent = procedure(var Handled: boolean; IdNo: integer;
   From, Subject, MsgId, Date: string; ArticleNo: integer) of object;
Typ je pou╛it udßlostφ OnHeaderCacheUpdate. Parametr Handled specifikuje zda implicitnφ odklßdacφ akce komponenty mß b²t provedena. Parametr IdNo specifikuje identifikaΦnφ Φφslo Φlßnku zφskanΘ hlaviΦkou. Parametr From specifikuje osobu, kterß odeslala Φlßnek na hostitele news. Parametr Subject specifikuje °ßdek subjektu Φlßnku. Parametr MsgId specifikuje identifikaci Φlßnku. Parametr Date urΦuje datum odeslßnφ Φlßnku novΘmu hostiteli.  Parametr ArticleNo specifikuje Φφslo Φlßnku.

T°φda TPostRecordType

Typ je pou╛φvßn pro uklßdßnφ hlaviΦkov²ch informacφ NNTP. Nenφ nutn² pro odeslßnφ zprßv, ale pro p°ijφmßnφ zprßv.
T°φda mß nßsledujφcφ vlastnosti:
 
property PrAppName: string; Vlastnost specifikuje jmΘno aplikace, kterß odeslala Φlßnek. Published Runtime, designtime
property PrArticleId: integer; Vlastnost obsahuje identifikaΦnφ Φφslo aktußlnφho Φlßnku. Published Runtime, read-only
property PrDistribution: string; Vlastnost je pou╛φvßna ke zm∞n∞ distribuΦnφho rozsahu Φlßnku. Je to Φßrkami odd∞len² seznam podobajφcφ se °ßdku "Newsgroup". P°edplatitelΘ jsou stßle °φzeny "Newsgroups", ale Φlßnek je takΘ zaslßn na v╣echny systΘmy urΦenΘ °ßdkem "Distribution".  Published Runtime, designtime
property PrFromAddress: string; Vlastnost specifikuje e-mail adresu osoby, kterß odeslala souΦasn² nov² Φlßnek. Published Runtime, designtime
property PrNewsGroups: string; Vlastnost specifikuje diskusnφ skupinu, kterΘ je souΦasn² Φlßnek odeslßn. Published Runtime, designtime
property PrReplyTo: string; Vlastnost obsahuje e-mail adresu, kterß m∙╛e b²t pou╛ita k odpov∞di osob∞, kterß odeslala souΦasn² Φlßnek. Published Runtime, designtime
property PrSubject: string; Vlastnost obsahuje °ßdek subject ze Φlßnku. Published Runtime, designtime
property PrTimeDate: string; Vlastnost obsahuje datum a Φas odeslßnφ Φlßnku. Published Runtime, designtime

Komponenta TNMNNTP

Komponenta TNMNNTP je pou╛φvßna pro Φtenφ a odesφlßnφ internetovsk²ch zprßv na serverech news pomocφ Network News Transfer Protocol (RFC 977). Pou╛itφ komponenty po╛aduje WSOCK32.DLL.
D°φve ne╛ m∙╛eme provßd∞t klφΦovΘ funkce komponenty TNMNNTP, musφme se nejprve p°ipojit na server news. To provedeme nastavenφm vlastnosti Host na p°φpustn² server news a volßme metodu Connect.
Seznam diskusnφch skupin na danΘm serveru m∙╛eme zφskat volßnφm metody GetGroupList. K v²b∞ru diskusnφ skupiny pro Φtenφ Φlßnku volßme metodu SetGroup a jako parametr p°edßme jmΘno po╛adovanΘ diskusnφ skupiny. Po nastavenφ diskusnφ skupiny m∙╛eme zφskat Φlßnek volßnφm GetArticle. ╚lßnek pak m∙╛eme nalΘzt ve vlastnostech Body a Header. Odeslßnφ Φlßnku provedeme volßnφm metody PostArticle po napln∞nφ vlastnostφ PostBody (t∞lo zprßvy) a PostHeader (hlaviΦka zprßvy).
Komponenta mß nßsledujφcφ vlastnosti:
 
property AttachFilePath: string; Vlastnost specifikuje umφst∞nφ pro ulo╛enφ soubor∙ p°ipojen²ch k Φlßnku, kterΘ jsou uvedeny ve vlastnosti Attachments. Implicitnφ hodnota tΘto vlastnosti je prßzdnß; soubory jsou uklßdßny do adresß°e aplikace. Soubory jsou uklßdßny pouze, pokud vlastnost ParseAttachments je true. Published Runtime, designtime
property Attachments: TStringList; Vlastnost je seznam soubor∙ p°ipojen²ch k souΦasnΘmu Φlßnku, kter² byl zφskßn ze vzdßlenΘho hostitele. Tyto soubory jsou pouze dek≤dovßny a ulo╛eny na disk do adresß°e specifikovanΘho vlastnostφ AttachFilePath, pokud vlastnost ParseAttachment je true. Vlastnost je nastavena po volßnφ metody GetArticle. Public Runtime, Read-Only
property Body: TExStringList; Vlastnost obsahuje t∞lo souΦasnΘho Φlßnku zφskanΘho ze vzdßlenΘho hostitele. Vlastnost je nastavena po volßnφ metody GetArticle nebo GetArticleBody. Pokud je volßna metoda GetArticleBody, pak kdy╛ vlastnost ParseAttachment je nastavena na true, libovolnΘ soubory p°ipojenΘ k Φlßnku nejsou rozlo╛eny a jsou vrßceny v t∞le Φlßnku. Public Runtime, Read-only
property CacheMode: TCacheMode; Vlastnost specifikuje typ pou╛itΘho odklßdßnφ Φlßnku. Mo╛nΘ hodnoty jsou definovanΘ typem TCacheMode: cmMixed - Kdy╛ Φlßnky, seznamy skupin, hlaviΦky nebo seznamy hlaviΦek jsou po╛adovßny, pak jsou zavedeny ze vzdßlenΘho hostitele. V tomto re╛imu jsou takΘ ulo╛eny na disk. cmLocal - Kdy╛ Φlßnky, seznamy skupin, hlaviΦky nebo seznamy hlaviΦek jsou po╛adovßny, pak jsou zavedeny z lokßlnφho disku. Jestli╛e na disku neexistujφ, pak vznikß udßlost OnInvalilidArticle, stejn∞ jako kdy╛ Φlßnek neexistuje na vzdßlenΘm hostiteli. cmRemote - Kdy╛ Φlßnky, seznamy skupin, hlaviΦky nebo seznamy hlaviΦek jsou po╛adovßny, pak jsou zavedeny ze vzdßlenΘho hostitele a nejsou uklßdßny na disk. Implicitn∞: cmMised
property CurrentArticle: integer; Vlastnost specifikuje poslednφ Φlßnek, kter² byl zaveden z hostitele. Je to obvykle Φφslo Φlßnku, kter² je obsa╛en ve vlastnostech Body a Header. Tato vlastnost se m∞nφ po ·sp∞╣nΘm volßnφ metod: GetArticle, GetArticleBody a GetArticleHeader. Public Runtime, Read-Only
property GroupList: TStringList; Vlastnost obsahuje seznam diskusnφch skupin na souΦasnΘm hostiteli. Vlastnost je nastavena po volßnφ metody GetGroupList. Public Runtime, Read-Only
property Header: TExStringList; Vlastnost obsahuje hlaviΦku souΦasnΘho Φlßnku zφskanΘho z hostitele. Vlastnost je nastavena po ·sp∞╣nΘm volßnφ GetArticle, GetArticleHeader nebo GetArticleList. Public Runtime, Read-Only
property HeaderRecord: TPostRecordType; Vlastnost obsahuje informace obsa╛enΘ v hlaviΦce Φlßnku. Public Runtime Only
property HiMessage: integer; Vlastnost specifikuje index nejaktußln∞j╣φ zprßvy (Φφslo), kterß je dostupnß v souΦasnΘ diskusnφ skupin∞.  Public Run-time, Read-only
property LoMessage: integer; Vlastnost specifikuje index nejmΘn∞ aktußlnφ zprßvy (Φφslo), kterß je dostupnß v souΦasnΘ diskusnφ skupin∞.  Public Run-time, Read-only
property NewsDir: string; Vlastnost specifikuje jmΘno adresß°e do kterΘho odklßdßme uklßdanΘ Φlßnky a hlaviΦky. V souΦasnΘ verzi FastNet, odklßdacφ slu╛by TNMNNTP jsou zakßzßny.
property ParseAttachments: boolean; Vlastnost urΦuje zda soubory p°ipojenΘ ke zprßvßm budou dek≤dovßny a ulo╛eny na disk nebo ne. P°i hodnot∞ true, soubory jsou odd∞leny od t∞la zprßvy, dek≤dovßny a ulo╛eny na disk. P°i hodnot∞ false z∙stßvajφ v t∞le zprßvy. Published Runtime, Designtime
property Password: string; Vlastnost je pou╛φvßna, kdy╛ p°i p°ihla╣ovßnφ na vzdßlenΘho hostitele je vy╛adovßna autentizace. Vlastnost UserID musφ b²t nastavena na odpovφdajφcφho u╛ivatele. P°i chybnΘm heslu vznikß udßlost OnAuthenticationFailed. Pokud nenφ zadßna identifikace u╛ivatele nebo heslo a autentizace je vy╛adovßna, pak vznikß udßlost OnAuthenticationNeeded. Published Runtime, Designtime
property PostAttachments: TStringList; Vlastnost je pou╛φvßna pro ulo╛enφ jmen soubor∙, kterΘ jsou p°ipojeny k odchßzejφcφ zprßv∞. Je nutno vklßdat v╛dy pouze jedno jmΘno souboru na °ßdek. Published Runtime, Designtime
property PostBody: TExStringList; Vlastnost  specifikuje t∞lo Φlßnku k odeslßnφ. Published Runtime, Designtime
property PostHeader: TExStringList; Vlastnost specifikuje hlaviΦku pro odesφlan² Φlßnek na vzdßlenΘho hostitele NNTP. ZßkaznickΘ polo╛ky hlaviΦky mohou b²t p°idßvßny k odchßzejφcφ hlaviΦce zprßvy zp°φstupn∞nφm vlastnosti Values PostHeader. Published Runtime, Designtime
property Posting: boolean; Vlastnost specifikuje zda Φlßnek m∙╛e b²t odeslßn v souΦasnΘ diskusnφ skupin∞. Public Runtime, Read-Only
property PostRecord: TPostRecordType; Vlastnost specifikuje nejobecn∞j╣φ polo╛ky hlaviΦky pou╛itΘ p°i odeslßnφ Φlßnku na hostitele NNTP. Published Runtime, Designtime
property SelectedGroup: string; Vlastnost specifikuje jmΘno souΦasnΘ diskusnφ skupiny. Vlastnost se m∞nφ volßnφm metody SetGroup. Public Runtime, Read-Only
property UserId: string; Vlastnost specifikuje identifikaci u╛ivatele, pokud je po╛adovßna autentizace p°i p°ihla╣ovßnφ na vzdßlenΘho hostitele. Vlastnost Password musφ b²t nastavena na heslo odpovφdajφcφho u╛ivatele. P°i chybnΘm heslu vznikß udßlost OnAuthenticationFailed. Pokud nenφ zadßna identifikace u╛ivatele nebo heslo a autentizace je vy╛adovßna, pak vynikß udßlost OnAuthenticationNeeded. Published Runtime, Designtime

Komponenta mß nßsledujφcφ metody:

procedure GetArticle(Ref: integer);
Metoda zφskßvß specifiovan² Φlßnek ze vzdßlenΘho hostitele NNTP. Parametr specifikuje index zφskßvanΘho Φlßnku od hostitele NNTP. Pokud parametr nenφ p°φpustn²m Φφslem Φlßnku, pak vznikß udßlost OnInvalidArticle. Po ·sp∞╣nΘm zφskßnφ Φlßnku vznikß OnArticle. Pokud je povoleno odklßdßnφ zprßv, pak vznikß OnArticleCacheUpdate. Po ·sp∞╣nΘm volßnφ tΘto metody jsou aktualizovßny vlastnosti Header, Body a HeaderRecord. Pokud jsou p°ipojeny n∞jakΘ soubory, pak jsou uvedeny ve vlastnosti Attachments.

procedure GetArticleBody(Ref: integer);
Metoda zφskßvß t∞lo specifikovanΘho Φlßnku. Parametr specifikuje index Φlßnku ze kterΘho zφskßvßme t∞lo. Po zφskßnφ t∞la ze vzdßlenΘho hostitele NNTP vznikß udßlost OnBody. Ne v╣echny servery podporujφ tuto metodu.

procedure GetArticleHeader(Ref: integer);
Metoda zφskßvß hlaviΦku specifikovanΘho Φlßnku. Parametr specifikuje index Φlßnku ze kterΘho zφskßvßme hlaviΦku. Po zφskßnφ hlaviΦky ze vzdßlenΘho hostitele NNTP vznikß udßlost OnHeader.

procedure GetArticleList(All: boolean; ArticleNumber: integer);
Metoda zφskßvß seznam Φlßnk∙ v souΦasnΘ diskusnφ skupin∞. Parametr All specifikuje zda chceme zφskat seznam v╣ech Φlßnky v diskusnφ skupin∞ (true) nebo pouze ΦßsteΦn² seznam. Parametr ArticleNumber specifikuje poΦet Φlßnk∙ obsa╛en²ch v seznamu. Pro ka╛d² Φlßnek v seznamu vznikß udßlost OnHeaderList.

procedure GetGroupList;
Metoda zφskßvß seznam dostupn²ch diskusnφch skupin ze vzdßlenΘho hostitele. Pro ka╛d² prvek seznamu vznikß udßlost OnGroupListUpdate.

procedure PostArticle;
Metoda odesφlß Φlßnek v souΦasn∞ vybranΘ diskusnφ skupin∞. Odeslan² Φlßnek je definovßn vlastnostmi PostRecord, PostBody, PostHeader a PostAttachments. Pokud zprßva je odeslßna ·sp∞╣n∞, pak vznikß udßlost OnPosted. Jestli╛e odeslßnφ je ne·sp∞╣nΘ, pak vznikß OnPostFailed.

procedure SetGroup(Group: string);
Metoda nastavuje souΦasnou aktivnφ diskusnφ skupinu na parametrem specifikovanou skupinu. Pokud skupina existuje, pak je vznikß udßlost OnGroupSelect. P°i ·sp∞╣nΘm volßnφ metody se zm∞nφ vlastnost SelectedGroup.

Komponenta mß takΘ n∞kolik udßlostφ:

property OnAbort: TNotifyEvent;
Udßlost nastßvß, kdy╛ je volßna metoda Abort.

property OnArticle: TNotifyEvent;
Udßlost nastßvß, kdy╛ je ·sp∞╣n∞ volßna metoda GetArticle. P°ijat² Φlßnek m∙╛e b²t zp°φstupn∞n vlastnostmi Body, Header a Attachment.

property OnArticleCacheUpdate: THeaderCacheEvent;
Udßlost nastßvß, kdy╛ Φlßnek je zφskßn ze vzdßlenΘho hostitele a odklßdßnφ je povoleno. Odklßdßnφ nenφ dostupnΘ, pokud vlastnost CacheMode nenφ nastavena sprßvn∞.

property OnAuthenticationFailed: TNotifyEvent;
Udßlost nastßvß, kdy╛ identifikace u╛ivatele nebo heslo jsou chybnΘ.

property OnAuthenticationNeeded: THandlerEvent;
Udßlost nastßvß, kdy╛ nenφ zadßna identifikace u╛ivatele a heslo a vzdßlen² hostitel vy╛aduje autentizaci p°i p°ihla╣ovßnφ.

property OnBody: TNotifyEvent;
Udßlost nastßvß, kdy╛ metoda GetArticleBody je provedena ·sp∞╣n∞.

property OnBodyCacheUpdate: THandlerEvent;
Udßlost nastßvß, kdy╛ metoda GetArticleBody je provedena ·sp∞╣n∞ a odklßdßnφ je povoleno. Zßle╛φ zde na vlastnosti CacheMode.

property OnGroupListCacheUpdate: TGroupRetrievedCacheEvent;
Udßlost nastßvß, kdy╛ metoda GetGroupList je provedena ·sp∞╣n∞ a odklßdßnφ je povoleno. Tato udßlost je generovßna pro ka╛dou skupinu v seznamu. Zßle╛φ zde na vlastnosti CacheMode.

property OnGroupListUpdate: TGroupRetrievedEvent;
Udßlost nastßvß, kdy╛ metoda GetGroupList je provedena ·sp∞╣n∞. Je generovßna pro ka╛dou skupinu v seznamu.

property OnGroupSelect: TNotifyEvent;
Udßlost nastßvß, kdy╛ metoda SetGroup je provedena ·sp∞╣n∞.

property OnGroupSelectRequired: THandlerEvent;
Udßlost nastßvß, kdy╛ je volßna metoda, kterß vy╛aduje v²b∞r skupiny. Metody GetArticle, GetArticleBody, GetArticleHeader, GetArticleList a PostArticle vy╛adujφ v²b∞r diskusnφ skupiny metodou SetGroup d°φve ne╛ mohou b²t pou╛ity.

property OnHeader: TNotifyEvent;
Udßlost nastßvß, kdy╛ hlaviΦka Φlßnku je zφskßna metodou GetArticleHeader.

property OnHeaderCacheUpdate: THeaderCacheEvent;
Udßlost nastßvß, kdy╛ hlaviΦka Φlßnku je zφskßna metodou GetArticleHeader a odklßdßnφ je povoleno. Odklßdßnφ zßvisφ na vlastnosti CacheMode.

property OnHeaderList: TNotifyEvent;
Udßlost je volßna pro ka╛d² Φlßnek v seznamu, kdy╛ metoda GetArticleList je ·sp∞╣n∞ provedena. V tΘto udßlosti musφ b²t Φteny udßlosti Header a HeaderRecord, proto╛e se p°i ka╛dΘm generovßnφ udßlosti m∞nφ.

property OnHeaderListCacheUpdate: THandlerEvent;
Udßlost je volßna pro ka╛d² Φlßnek v seznamu, kdy╛ metoda GetArticleList je ·sp∞╣n∞ provedena a odklßdßnφ je povoleno.

property OnInvalidArticle: TNotifyEvent;
Udßlost nastßvß, kdy╛ identifikaΦnφ Φφslo Φlßnku p°edanΘ metodßm GetArticle, GetArticleBody nebo GetArticleHeader neexistuje nebo je chybnΘ.

property OnPosted: TNotifyEvent;
Udßlost nastane, kdy╛ metoda PostArticle ·sp∞╣n∞ ode╣le Φlßnek na vzdßlenΘho hostitele. P°i ne·sp∞chu vznikß OnPostFailed.

property OnPostFailed: TOnErrorEvent;
Udßlost nastane, kdy╛ metoda PostArticle ne·sp∞╣n∞ ode╣le Φlßnek na vzdßlenΘho hostitele. P°i ·sp∞chu vznikß OnPosted.


Komponenta TNMTime

Komponenta je pou╛φvßna pro zφskßvßnφ Φasu z InternetovskΘho serveru time, jak je popsßno v RFC 868. Komponenta vy╛aduje WSOCK32.DLL. D°φve ne╛ m∙╛eme zφskat Φas z InternetovskΘho serveru time, musφme znßt jmΘno hostitele nebo teΦkovou IP adresu hostitele time a p°i°adit tuto hodnotu vlastnosti Host. Normßln∞ vlastnost Port nemusφme modifikovat, pokud hostitel nenaslouchß na nestandardnφm portu. Po nastavenφ hostitele Φteme pouze hodnotu vlastnosti TimeStr, a tφm zφskßme Φas ze specifikovanΘho hostitele.
Komponenta mß tyto vlastnosti:
 
property TimeInt: longint; Vlastnost vracφ poΦet sekund od p∙lnoci 1. 1. 1900. D°φve ne╛ tuto vlastnost m∙╛eme Φφst, musφ b²t nastavena vlastnost Host na p°φpustn² server time. Public Runtime, Readonly
property TimeStr: string; Vlastnost vracφ Φas ze vzdßlenΘho hostitele jako °et∞zec. D°φve ne╛ tuto vlastnost m∙╛eme Φφst, musφ b²t nastavena vlastnost Host na p°φpustn² server time. Public Runtime, Readonly

  1. Pou╛itφ komponenty TNMHTTP si ukß╛eme nß p°φklad∞. ZaΦneme v²voj novΘ aplikace. Na formulß° umφstφme tyto komponenty: 4x TMemo, TEdit, TOpenDialog, TNMHTTP a 7x TButton. V²znam komponent je tento:
  2. Obsluhy stisku tlaΦφtek vypadajφ takto:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      NMHTTP1->Get(Edit1->Text);
    }
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      NMHTTP1->Head(Edit1->Text);
    }
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      NMHTTP1->Options(Edit1->Text);
    }
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
      AnsiString S;
      if(InputQuery("Trace Data Required","Input data to send as trace",S))
        NMHTTP1->Trace(Edit1->Text, S);
    }
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
      if (OpenDialog1->Execute())
        {
          NMHTTP1->OutputFileMode = TRUE;
          NMHTTP1->Put(Edit1->Text, OpenDialog1->FileName);
          NMHTTP1->OutputFileMode = FALSE;
        }
    }
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
      AnsiString S;
      if (InputQuery("Post Data Required", "Input data to Post", S))
        NMHTTP1->Post(Edit1->Text, S);
    }
    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
      NMHTTP1->Delete(Edit1->Text);
    }
    Je zapot°ebφ vytvo°it je╣t∞ n∞kolik obsluhu udßlostφ komponenty TNMHTTP. Obsluha OnAuthenticationNeeded vypadß takto:
    void __fastcall TForm1::NMHTTP1AuthenticationNeeded(TObject *Sender)
    {
      AnsiString AnID, APass;
      InputQuery("Authentication required", "Enter a user ID", AnID);
      InputQuery("Authentication required", "Enter a password", APass);
      NMHTTP1->HeaderInfo->UserId = AnID;
      NMHTTP1->HeaderInfo->Password = APass;
      ShowMessage("Authentication information in place, please retry the previous command");
    }
    Udßlost vznikß, kdy╛ dokument specifikovan² adresou v Edit1 vy╛aduje autentizaci. Obsluha OnFailure vypadß takto:
    void __fastcall TForm1::NMHTTP1Failure(CmdType Cmd)
    {
      Memo1->Text = NMHTTP1->Header;
      Memo2->Text = NMHTTP1->Body;
      switch(Cmd)
        {
          case CmdGET: Memo3->Lines->Add("HTTP GET Failed");
          case CmdPOST: Memo3->Lines->Add("HTTP Post Failed");
          case CmdHEAD: Memo3->Lines->Add("HTTP HEAD Failed");
          case CmdOPTIONS: Memo3->Lines->Add("HTTP OPTIONS Failed");
          case CmdTRACE: Memo3->Lines->Add("HTTP TRACE Failed");
          case CmdPUT: Memo3->Lines->Add("HTTP PUT Failed");
          case CmdDELETE: Memo3->Lines->Add("HTTP Delete Failed");
        }
    }
    Obsluhu OnRedirect tvo°φ p°φkaz:
    void __fastcall TForm1::NMHTTP1Redirect(bool &Handled)
    {
      if (MessageDlg("This site is redirecting you to another site. Allow redirect?",
          mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrNo)
        Handled = TRUE;
    }
    Poslednφ obsluha (OnSuccess) vypadß takto:
    void __fastcall TForm1::NMHTTP1Success(CmdType Cmd)
    {
      if (NMHTTP1->CookieIn != "")
        Memo4->Text = NMHTTP1->CookieIn;
      Memo1->Text = NMHTTP1->Header;
      Memo2->Text = NMHTTP1->Body;
      switch(Cmd)
        {
          case CmdGET: Memo3->Lines->Add("HTTP GET Successful");
          case CmdPOST: Memo3->Lines->Add("HTTP POST Successful");
          case CmdHEAD: Memo3->Lines->Add("HTTP HEAD Successful");
          case CmdOPTIONS: Memo3->Lines->Add("HTTP OPTIONS Successful");
          case CmdTRACE: Memo3->Lines->Add("HTTP TRACE Successful");
          case CmdPUT: Memo3->Lines->Add("HTTP PUT Successful");
          case CmdDELETE: Memo3->Lines->Add("HTTP DELETE Successful");
        }
    }
    Tφm je aplikace hotova. Pokuste se pochopit jak TNMHTTP pracuje.
  3. Podφvejme se je╣t∞ na jeden p°φklad pou╛itφ TNMHTTP. ZaΦneme v²voj novΘ aplikace a na formulß° vlo╛φme 7x TEdit, 3x TMemo, TButton a TNMHTTP. V²znam komponent je tento:
  4. Obsluhu stisku tlaΦφtka tvo°φ:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      NMHTTP1->HeaderInfo->LocalMailAddress = Edit3->Text;
      NMHTTP1->HeaderInfo->LocalProgram = Edit4->Text;
      NMHTTP1->HeaderInfo->Cookie = Edit2->Text;
      NMHTTP1->HeaderInfo->Referer = Edit7->Text;
      NMHTTP1->HeaderInfo->UserId = Edit5->Text;
      NMHTTP1->HeaderInfo->Password = Edit6->Text;
      NMHTTP1->InputFileMode = TRUE;
      NMHTTP1->Header = ".\head.txt";
      NMHTTP1->Body = ".\Body.txt";
      NMHTTP1->Get(Edit1->Text);
    }
    P°i stisku tlaΦφtka jsou napln∞ny vlastnosti HeaderInfo z editaΦnφch ovladaΦ∙. Vlastnost InputFileMode je nastavena na true a tak zφskan² dokument bude ulo╛en v souborech. Vlastnost Header je nastavena na soubor head.txt v aktußlnφm adresß°i a vlastnost Body na soubor body.txt. Dokument specifikovan² v Edit1 je zφskßn metodou Get.
    Obsluhu udßlosti OnAboutToSend komponenty TNMHTTP vypadß takto:
    void __fastcall TForm1::NMHTTP1AboutToSend(TObject *Sender)
    {
      NMHTTP1->SendHeader->Values["If-Modified-Since"] =
         "Wed, 09 Sep 1998 10:49:15 GMT";
      Memo3->Text = NMHTTP1->SendHeader->Text;
    }
    Obsluha k odchßzejφcφ hlaviΦce p°idß prvek If-Modified-Since. Zb²vß je╣t∞ obsluha udßlosti OnSuccess:
    void __fastcall TForm1::NMHTTP1Success(CmdType Cmd)
    {
      if (Cmd == CmdGET)
        {
          Memo1->Lines->LoadFromFile(".\head.txt");
          Memo2->Lines->LoadFromFile(".\Body.txt");
        }
    }
    Aplikaci si prostupujte.
  5. Ji╛ hotovou aplikaci pou╛φvajφcφ komponentu TNMHTTP nalezneme v adresß°i Program Files\Borland\CBuilder\Examples\Interner\Http. ProhlΘdn∞te si tuto aplikaci a sna╛te se pochopit, jak pracuje.
  6. Pou╛itφ komponet TNMMsg a TNMMsgServ si ukß╛eme na p°φklad∞. ZaΦneme v²voj novΘ aplikace a na formulß° umφstφme komponenty: 2x TEdit, 2x TMemo, TNMMsg a TNMMsgServ. Nastavφme vlastnost Host komponenty TNMMsg na 127.0.0.1. Je to IP adresa pro lokßlnφho hostitele. Pokud budeme chtφt pozd∞ji otestovat tuto aplikaci mezi poΦφtaΦi, pak nastavφme vlastnost Host na IP adresu poΦφtaΦe se kter²m chceme komunikovat. Obsluha udßlosti OnKeyPress prvnφho editaΦnφho ovladaΦe je tvo°ena:

  7. void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
    {
      if (Key == 0x0D)
        {
          NMMsg1->FromName = Edit2->Text;
          NMMsg1->PostIt(Edit1->Text);
        }
    }
    Kdy╛ stiskneme klßvesu Enter, pak vlastnost FromName TNMMsg nastavφme na hodnotu druhΘho editaΦnφho ovladaΦe a zprßva zadanß do prvnφho editaΦnφho ovladaΦe je odeslßna na vzdßlenΘho hostitele pomocφ metody PostIt.
    Komponenta TNMMsg mß je╣t∞ obsluhu udßlosti OnMessageSent:
    void __fastcall TForm1::NMMsg1MessageSent(TObject *Sender)
    {
      Memo2->Lines->Add("Message Sent");
    }
    Komponenta TNMMsgServ mß pouze obsluhu OnMSG. Kdy╛ je p°ijata zprßva, pak je p°idßna do Memo1 a do Memo2 je p°idßna informace od koho zprßva pochßzφ.
    void __fastcall TForm1::NMMSGServ1MSG(TComponent *Sender,
          const AnsiString sFrom, const AnsiString sMsg)
    {
      Memo2->Lines->Add("Incoming message from "+sFrom);
      Memo1->Lines->Add("["+sFrom+"] "+sMsg);
    }
    Po spu╣t∞nφ aplikace, zapφ╣eme svoje jmΘno do Edit2. Na╣i zprßvu zapφ╣eme do Edit1 a stiskneme Enter. Zprßva bude zobrazena v Memo1.
  8. Ji╛ hotovou aplikaci pou╛φvajφcφ tyto komponenty nalezneme v adresß°i Program Files\Borland\CBuilder\Examples\Interner\MsgDemo. ProhlΘdn∞te si tuto aplikaci a sna╛te se pochopit, jak pracuje.
  9. S komponentou TNMNNTP se seznßmφme v tΘto aplikaci. ZaΦneme v²voj novΘ aplikace a na formulß° umφstφme tyto komponenty. 5x TEdit, 3x TButton, 2x TListBox, TMemo, TOpenDialog, TStatusBar a TNMNNTP. V²znam komponent je tento:
  10. Obsluha stisku prvnφho tlaΦφtka je tvo°ena p°φkazy:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if (NMNNTP1->Connected)
        NMNNTP12->Disconnect()
      else
        {
          if (Edit1->Text != "")
            {
              NMNNTP1->UserID = Edit1->Text;
              NMNNTP1->Password = Edit2->Text;
            }
          NMNNTP1->Host = Edit3->Text;
          NMNNTP1->Connect();
        }
    }
    Obsluhu OnConnect komponenty TNMNNTP tvo°φ:
    void __fastcall TForm1::NMNNTP1Connect(TObject *Sender)
    {
      StatusBar1->SimpleText = "Connected";
      NMNNTP1->GetGroupList();
    }
    Po z°φzenφ p°ipojenφ je o tom informovßn u╛ivatel na stavovΘm °ßdku. Dßle je metodou GetGroupList zφskßn seznamu diskusnφch skupin z hostitele na kterΘho jsme p°ipojeni. Seznam je vlo╛en do ListBox1.
    Obsluhu OnClick komponenty ListBox1 tvo°φ p°φkazy:
    void __fastcall TForm1::ListBox1Click(TObject *Sender)
    {
      if (ListBox1->ItemIndex != -1)
      {
        ListBox2->Clear();
        NMNNTP1->SetGroup(ListBox1->Items[ListBox1->ItemIndex]);
        Caption = "Reading - "+NMNNTP1->SelectedGroup+" Lo: "
          +IntToStr(NMNNTP1->LoMessage)+" Hi: "+IntToStr(NMNNTP1->HiMessage);
      }
    }
    Kdy╛ my╣φ klikneme v tomto seznamu, pak vybran² prvek seznamu je p°edßn metod∞ SetGroup k nastavenφ souΦasnΘ diskusnφ skupiny na vybranou skupinu. Obsluhu udßlosti OnGroupSelect komponenty TNMNNTP tvo°φ:
    void __fastcall TForm1::NMNNTP1GroupSelect(TObject *Sender)
    {
      Caption = "Posting - "+NMNNTP1->SelectedGroup;
      if (NMNNTP1->Posting)
        Caption = Caption + "(Posting allowed)";
      else
        Caption = Caption + "(Posting prohibited)";
    }
    Kdy╛ je vybrßna novß skupina vznikß udßlost OnGroupSelect. Titulek aplikace je nastaven na zobrazenφ vlastnosti SelectedGroup plus informace o mo╛nosti odesφlat do souΦasnΘ skupiny. Obsluhu udßlosti OnGroupListUpdate stejnΘ komponenty tvo°φ:
    void __fastcall TForm1::NMNNTP1GroupListUpdate(AnsiString name;
         int FirstArticle, LastArticle; bool Posting)
    {
      ListBox1->Items->Add(name);
    }
    Kdy╛ je zφskßn seznam diskusnφch skupin, pak tato udßlost je volßna pro ka╛dou skupinu v seznamu. Obsluhu OnDisconnect tvo°φ:
    void __fastcall TForm1::NMNNTP1Disconnect(TObject *Sender)
    {
      StatusBar1->SimpleText = "Disconnected";
    }
    Obsluhu stisku druhΘho tlaΦφtka tvo°φ:
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      if (OpenDialog1->Execute())
        ListBox2->Items->Add(OpenDialog1->FileName);
    }
    Kdy╛ toto tlaΦφtko stiskneme, pak m∙╛eme v dialogovΘm okn∞ otevφrßnφ souboru vybrat soubor, kter² je p°idßn do ListBox2. Obsluhu stisku t°etφho tlaΦφtka tvo°φ:
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      NMNNTP1->PostAttachments->Text = ListBox2->Items->Text;
      NMNNTP1->PostBody->Text = Memo1->Text;
      NMNNTP1->PostRecord->PrFromAddress = Edit4->Text;
      NMNNTP1->PostRecord->PrReplyTo = Edit4->Text;
      NMNNTP1->PostRecord->PrSubject = Edit5->Text;
      NMNNTP1->PostRecord->PrAppName = "Netmasters Example News Posting";
      NMNNTP1->PostRecord->PrNewsGroups = NMNNTP1->SelectedGroup;
      NMNNTP1->PostHeader->Values["Organization"] = "Our Organization";
      NMNNTP1->PostArticle();
    }
    P°i stisku t°etφho tlaΦφtka, vlastnost PostAttachments je nastavena na seznam zobrazen² v ListBox2. Vlastnost PostBody je nastavena na text zadan² do Memo1 a je zapln∞na vlastnost PostRecord. Vlastnost PostHeader mß p°idanou hodnotu nazvanou Organization pro specifikaci organizace odesilatele a pro odeslßnφ Φlßnku je volßna metoda PostArticle. Obsluhy OnPosted a OnPostFailed jsou tvo°eny:
    void __fastcall TForm1::NMNNTP1Posted(TObject *Sender)
    {
      StatusBar1->SimpleText = "Article Posted Successfully";
    }
    void __fastcall TForm1.NMNNTP1PostFailed(TComponent *Sender;
           word Errno; AnsiString Errmsg)
    {
      ShowMessage("Posting Failed: "+Errmsg+" Error number "+IntToStr(Errno));
    }
    Komponenta TNMNNTP mß je╣t∞ n∞kolik obsluh udßlostφ:
    void __fastcall TForm1::NMNNTP1GroupSelectRequired(&bool Handled)
    {
      AnsiString S;
      if (InputQuery("Group selection required", "Enter the name of a group:", S))
        {
          NMNNTP1->SetGroup(S);
          Handled = TRUE;
        }
    }
    void __fastcall TForm1.NMNNTP1AuthenticationFailed(Sender: TObject);
    {
      ShowMessage("Authentication failed");
    }
    void __fastcall TForm1::NMNNTP1AuthenticationNeeded(bool &Handled)
    {
      AnsiString AnID, APass;
      if (NMNNTP1->UserID = "")
          if (InputQuery("Authentication Required", "Enter User ID", AnID))
            {
              NMNNTP1->UserId = AnID;
              Handled = TRUE;
            }
      if (NMNNTP1->Password = "")
          if (InputQuery("Authentication Required", "Enter Password", APass))
            {
              NMNNTP1->Password = APass;
              Handled = TRUE;
            }
    }
    Udßlost OnGroupSelectRequired je volßna, kdy╛ p°i odesφlßnφ Φlßnku nenφ vybrßna diskusnφ skupina. Dal╣φ dv∞ obsluhy nepot°ebujφ vysv∞tlenφ. Aplikaci si prostudujte.
  11. ZaΦneme v²voj novΘ aplikace. Na formulß° umφstφme 4x TEdit, 7x Button, 3x TMemo, 2x TListBox, 2x TLabel, TCheckBox, TStatusBar a TNMNNTP. Komponenty majφ tento v²znam:
  12. Do jednotky vlo╛φme hlaviΦkov² soubor filectrl.h. Obsluha stisku prvnφho tlaΦφtka a n∞kolik dat╣φch obsluh vypadß takto:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if (NMNNTP1->Connected)
        NMNNTP1.Disconnect();
      else
        {
          NMNNTP1->Host = Edit1->Text;
          NMNNTP1->Connect();
        }
    }
    void __fastcall TForm1::NMNNTP1Connect(TObject *Sender)
    {
      int I;
      StatusBar1->SimpleText = "Connected";
      NMNNTP1->GetGroupList();
      for (I = 0; I <= (NMNNTP1->GroupList->Count -1); I++)
        ListBox1->Items->Add(NthWord(NMNNTP1->GroupList->Strings[I], ' ', 1));
    }
    void __fastcall TForm1::ListBox1Click(TObject *Sender)
    {
      if (ListBox1->ItemIndex != -1)
      {
        ListBox2->Clear();
        NMNNTP1->SetGroup(ListBox1->Items[ListBox1->ItemIndex]);
        Caption = "Reading - "+NMNNTP1->SelectedGroup+
          " Lo: "+IntToStr(NMNNTP1->LoMessage)+" Hi: "+IntToStr(NMNNTP1->HiMessage);
      }
    }
    void __fastcall TForm1::NMNNTP1Disconnect(TObject *Sender)
    {
      StatusBar1->SimpleText = "Disconnected";
    }
    Tyto obsluhy nepot°ebujφ vysv∞tlenφ. Obsluhu udßlosti stisku pßtΘho tlaΦφtka tvo°φ:
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
      NMNNTP1->GetArticleList(true, 0);
    }
    Metoda GetArticleList zφskßvß seznam Φlßnk∙ souΦasnΘ diskusnφ skupiny. Jeliko╛ prvnφ parametr mß hodnotu true jsou zφskßny v seznamu v╣echny Φlßnky. Obsluhu udßlosti OnHeaderList tvo°φ (je volßna pro ka╛dou hlaviΦku v seznamu):
    void __fastcall TForm1::NMNNTP1HeaderList(TObject *Sender)
    {
      ListBox2->Items->Add("["+IntToStr(NMNNTP1->HeaderRecord->PrArticleId)+"]Subject: "
           +NMNNTP1->HeaderRecord->PrSubject);
    }
    Nßsledujφcφch n∞kolik obsluh op∞t nepot°ebuje vysv∞tlenφ:
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
      NMNNTP1->Abort();
    }
    void __fastcall TForm1::NMNNTP1Abort(TObject *Sender)
    {
      ShowMessage("Aborted");
    }
    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
      AnsiStirng S;
      if (SelectDirectory(S, TSelectDirOpts() << sdAllowCreate << sdPerformCreate << sdPrompt, 0))
        {
          Label1->Caption = S;
          NMNNTP1->AttachFilePath = S;
        }
    }
    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
      if (CheckBox1->Checked)
        NMNNTP1->ParseAttachments = TRUE;
      else
        NMNNTP1->ParseAttachments = FALSE;
    }
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
      AnsiString S;
      int I;
      if (InputQuery("Retrieve article header", "Which article header to retrieve", S)
        {
          I = StrToIntDef(S, -1);
          if (I != -1)
            NMNNTP1->GetArticleHeader(I);
        }
    }
    void __fastcall TForm1::NMNNTP1Header(TObject *Sender)
    {
      Memo2->Text = NMNNTP1->Header->Text;
      Edit2->Text = NMNNTP1->HeaderRecord->PrFromAddress;
      Edit3->Text = NMNNTP1->HeaderRecord->PrSubject;
      Edit4->Text = NMNNTP1->HeaderRecord->PrTimeDate;
    }
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      AnsiString S;
      int I;
      if (InputQuery("Retrieve article", "Which article to retrieve", S))
        {
          I = StrToIntDef(S, -1);
          if (I != -1)
            NMNNTP1->GetArticle(I);
        }
    }
    void __fastcall TForm1::NMNNTP1InvalidArticle(TObject *Sender)
    {
      ShowMessage("Invalid article number");
    }
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      AnsiString S;
      int I;
      if (InputQuery("Retrieve article body", "Which article body to retrieve", S))
        {
          I = StrToIntDef(S, -1);
          if (I != -1)
            NMNNTP1->GetArticleBody(I);
        }
    }
    void __fastcall TForm1::NMNNTP1Article(TObject *Sender)
    {
      Memo3->Text = NMNNTP1->Body->Text;
      Memo2->Text = NMNNTP1->Header->Text;
      Memo1->Text = NMNNTP1->Attachments->Text;
      Edit2->Text = NMNNTP1->HeaderRecord->PrFromAddress;
      Edit3->Text = NMNNTP1->HeaderRecord->PrSubject;
      Edit4->Text = NMNNTP1->HeaderRecord->PrTimeDate;
      Label2->Caption = IntToStr(NMNNTP1->CurrentArticle);
    }
    void __fastcall TForm1::NMNNTP1Body(TObject *Sender)
    {
      Memo2->Text = NMNNTP1->Body->Text;
      Memo1->Text = NMNNTP1->Attachments->Text;
    }
    void __fastcall TForm1::NMNNTP1GroupSelectRequired(bool &Handled)
    {
      AnsiString S;
      if (InputQuery("Group selection required", "Newsgroup: ", S))
        {
          NMNNTP1->SetGroup(S);
          Handled = TRUE;
        }
    }
    Aplikace je hotova, pokuste se pochopit jak pracuje.
  13. Ji╛ hotovou aplikaci pou╛φvajφcφ komponentu TNMNNTP nalezneme v adresß°i Program Files\Borland\CBuilder\Examples\Interner\Nntp. ProhlΘdn∞te si tuto aplikaci a sna╛te se pochopit, jak pracuje.
  14. S pou╛itφm komponenty TNMTime se seznßme v dal╣φ aplikacφ. ZaΦneme v²voj novΘ aplikace a na formulß° umφstφme TNMTime, 2x TEdit a TButton. Obsluhu stisku tlaΦφtka tvo°φ:

  15. void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      NMTime1->Host = "tmc.edu";
      NMTime1->Timeout = 5000;
      Edit1->Text = NMTime1->TimeStr;
      Edit2->Text = IntToStr(NMTime1->TimeInt);
    }
    P°i stisku tlaΦφtka je vlastnost Host nastavena na tmc.edu, co╛ je p°φpustn² server Φasu. Vlastnost Timeout je nastavena na 5 sekend. EditaΦnφ ovladaΦe zobrazφ vlastnosti TimeStr a TimeInt.
  16. Ji╛ hotovou aplikaci pou╛φvajφcφ komponentu TNMTime nalezneme v adresß°i Program Files\Borland\CBuilder\Examples\Interner\Time. ProhlΘdn∞te si tuto aplikaci a sna╛te se pochopit, jak pracuje.
12. Komponenty NetMasters II