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 |
-
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:
-
Memo1 - Zobrazenφ hlaviΦky
-
Memo2 - Zobrazenφ t∞la
-
Memo3 - Zobrazenφ stavu
-
Memo4 - Zobrazenφ Cookie
-
Edit1 - Zadßnφ URL
-
Button1 - P°φkaz Get
-
Button2 - P°φkaz Head
-
Button3 - P°φkaz Options
-
Button4 - P°φkaz Trace
-
Button5 - P°φkaz Put
-
Button6 - P°φkaz Post
-
Button7 - P°φkaz Delete
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.
-
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:
-
Edit1 - Vstup URL
-
Edit2 - Vstup odchßzejφcφch Cookie
-
Edit3 - Vstup lokßlnφ e-mail adresy
-
Edit4 - Vstup jmΘna lokßlnφho programu
-
Edit5 - Vstup identifikace u╛ivatele
-
Edit6 - Vstup hesla
-
Edit7 - Vstup odkazu
-
Memo1 - Zobrazenφ hlaviΦky
-
Memo2 - Zobrazenφ t∞la
-
Memo3 - Zobrazenφ odchßzejφcφ hlaviΦky (SendHeader)
-
Button1 - Provedenφ p°φkazu Get
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.
-
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.
-
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:
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.
-
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.
-
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:
-
Edit1 - Identifikace u╛ivatele (je-li po╛adovßna autentizace)
-
Edit2 - Heslo (je-li po╛adovßna autentizace)
-
Edit3 - Hostitel nebo IP adresa
-
Edit4 - Adresa odesilatele Φlßnku
-
Edit5 - ╪ßdek "Subject" Φlßnku
-
Button1 - P°ipojit/odpojit
-
Button2 - P°idej p°ipojen² soubor.
-
Button3 - Ode╣li Φlßnek
-
Memo1 - T∞lo Φlßnku
-
ListBox1 - Seznam diskusnφch skupin
-
ListBox2 - Seznam p°ipojen²ch soubor∙
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.
-
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:
-
Edit1 - Hostitel nebo IP adresa
-
Edit2 - Odesφlatel Φlßnku
-
Edit3 - Subjekt Φlßnku
-
Edit4 - Datum a Φas odeslßnφ Φlßnku
-
Button1 - P°ipojenφ/odpojenφ
-
Button2 - Zφskßnφ Φlßnku
-
Button3 - Zφskßnφ t∞la Φlßnku
-
Button4 - Zφskßnφ hlaviΦky Φlßnku
-
Button5 - Zφskßnφ seznamu (hlaviΦek) Φlßnk∙
-
Button6 - Zru╣enφ souΦasnΘ operace
-
Button7 - Zm∞na cesty p°ipojen²ch soubor∙
-
Memo1 - Seznam p°ipojen²ch soubor∙
-
Memo2 - HlaviΦka Φlßnku
-
Memo3 - T∞lo Φlßnku
-
ListBox1 - Seznam diskusnφch skupin
-
ListBox2 - Seznam Φlßnk∙
-
CheckBox1 - Rozklßdat p°ipojenΘ soubory
-
Label1 - Zobrazenφ cesty p°ipojen²ch soubor∙
-
Label2 - ╚φslo souΦasnΘho Φlßnku
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.
-
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.
-
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°φ:
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.
-
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.
![](/file/23411/Chip_2002-05_cd1.bin/chplus/cpp/5/PreviousArrow.gif) ![](/file/23411/Chip_2002-05_cd1.bin/chplus/cpp/5/NextArrow.gif) ![](/file/23411/Chip_2002-05_cd1.bin/chplus/cpp/5/WayUpArrow.gif) |
12. Komponenty NetMasters II
|