(* * Test program of TDNSResolver, Indy library. * * Written by Fumio KAWAMATA * October 31, 2005 * * Based on the code from the atozedsoftware.indy.general newsgroup, * news.atozedsoftware.com. * *) unit DNSResolver_Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IdStack, IdGlobal, Buttons, IdBaseComponent, IdComponent, IdTCPClient, IdTCPConnection, IdDNSResolver; (* The units which name start with the letters "Id" are libraries of the * Indy Project, http://www.indyproject.org/. * This program is compilable with the Indy vertion 10.0.52. *) type TFormMain = class(TForm) LabeledEditHostName: TLabeledEdit; LabeledEditDNSServer: TLabeledEdit; BitBtnClose: TBitBtn; Memo: TMemo; AResolver: TIdDNSResolver; LabelMemo: TLabel; BitBtnResolve: TBitBtn; procedure BitBtnCloseClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BitBtnResolveClick(Sender: TObject); private public end; var FormMain: TFormMain; implementation {$R *.dfm} procedure InitializeFont; var MyFont: TFont; begin MyFont:=TFont.Create; MyFont.Name:='Courie'; MyFont.Size:=10; MyFont.Charset:=1; FormMain.Font:=MyFont; MyFont.Free; end; procedure TFormMain.BitBtnCloseClick(Sender: TObject); begin Close; end; procedure TFormMain.FormCreate(Sender: TObject); begin InitializeFont; end; procedure TFormMain.BitBtnResolveClick(Sender: TObject); var Count: Integer; DNSServer: String; HostName: String; I: Integer; begin Memo.Lines.Clear; DNSServer:=LabeledEditDNSServer.Text; HostName:=LabeledEditHostName.Text; if (DNSServer='')or(HostName='') then begin Memo.Lines.Add('*** Error ***'); if DNSServer='' then Memo.Lines.Add('DNS Server is empty.'); if HostName='' then Memo.Lines.Add('Host name is empty.'); Exit; end; AResolver.Host:=DNSServer; AResolver.QueryType:=[qtA]; AResolver.Resolve(HostName); Count:=AResolver.QueryResult.Count; if Count=0 then Exit; for I:=0 to Count-1 do begin if AResolver.QueryResult.Items[I] is TARecord then with TARecord(AResolver.QueryResult[I]) do Memo.Lines.Add(ClassName+': '+Name+' resolves to IP address '+IPAddress); end; end; end.