wystarcza.
Oczywiscie mozna go zoptymalizowac, ale to juz inna bajka.
Pozdrawiam
SuperMann
----------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, DateUtils, xmldom, XMLIntf, msxmldom, XMLDoc, WinINet,
ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
DateTimePicker1: TDateTimePicker;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function kurs_z_dnia(data_kursu: TDateTime): Currency;
function IsUrlValid(url: string): boolean;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.kurs_z_dnia(data_kursu: TDateTime): Currency;
var
dzien_roku, nr_tabeli, nr_tabeli1: integer;
nazwa_pliku: string;
XML1: TXMLDocument;
strona: string;
pelna_nazwa: string;
blad: boolean;
Noga1: IXMLNode;
kod_walutyt, kurst: string;
begin
result:= 0;
dzien_roku:= DayOfTheYear(data_kursu);
nr_tabeli1:= trunc(dzien_roku - (2 * (dzien_roku / 7)));
nr_tabeli:= nr_tabeli1;
XML1:= TXMLDocument.Create(self);
blad:= true;
try
while (blad) and ((nr_tabeli1-15)<nr_tabeli) do begin
pelna_nazwa:= 'http://www.nbp.pl/Kursy/xml/' + 'a'
+ Format('%0.3d', [nr_tabeli]) + 'z' + FormatDateTime('yyMMdd',
data_kursu) + '.xml';
blad:= not (poprawnyURL(pelna_nazwa));
Application.ProcessMessages;
dec(nr_tabeli);
end;
if not (blad) then begin
XML1.FileName:= pelna_nazwa;
XML1.Active:= true;
Noga1:= XML1.DocumentElement.ChildNodes.FindNode('pozycja');
while (Noga1<nil) and (kod_walutyt<'EUR') do begin
kurst:= Noga1.ChildNodes['kurs_sredni'].Text;
kod_walutyt:= Noga1.ChildNodes['kod_waluty'].Text;
Noga1:= Noga1.NextSibling;
end;
if (kurst<'') then result:= StrToFloat(kurst) else result:=0;
end else
MessageBox(0, 'Brak kursu z wybranego dnia.', 'Błąd', MB_OK or
MB_ICONERROR);
except
MessageBox(0, 'Błąd połączenia z serwerem NBP.', 'Błąd', MB_OK or
MB_ICONERROR);
end;
XML1.Free;
end;
function TForm1.poprawnyURL(url: string): boolean;
var
hSession, hfile, hRequest: hInternet;
dwindex, dwcodelen: dword;
dwcode: array[1..20] of char;
res: pchar;
begin
if pos('http://', lowercase(url)) = 0 then
url:= 'http://' + url;
Result:= false;
hSession:= InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,
nil, nil, 0);
if assigned(hsession) then begin
hfile:= InternetOpenUrl( hsession, pchar(url), nil, 0,
INTERNET_FLAG_RELOAD, 0);
dwIndex:= 0;
dwCodeLen:= 10;
dwIndex);
result:= (res = '200') or (res = '302');
if assigned(hfile) then
InternetCloseHandle(hfile);
InternetCloseHandle(hsession);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= FloatToStr(kurs_z_dnia(DateTimePicker1.DateTime));
end;
end.