Delphi - база знаний

Как по IP адресу получить HostName (и обратно)


Как по IP адресу получить HostName (и обратно)




functionTGenericNetTask.GetPeerOrigin( const ALogin : String ) : DWORD;
const AddressStrMaxLen = 256;
var len : DWORD;
       ptr : PChar;
       pHE : PHostEnt;
       addr : TSockAddr;
       buf : Array [0..AddressStrMaxLen-1] of Char;


begin
   if FNet=nil then raise ESocketError.Error(-1,ClassName+'.GetPeerAds: Net is
not defined',WSAHOST_NOT_FOUND);
   len := SizeOf(TSockAddr);
   if getpeername(FSocket,addr,len)<>0 then
RaiseLastSocketError(-1,ClassName+'.GetPeerAds: getpeername()');
   case addr.sin_family of
   AF_INET: // TCP/IP

       begin
           pHE := gethostbyaddr( PChar(@addr.sin_addr), SizeOf(TInAddr),
AF_INET );
           if pHE=nil then RaiseLastSocketError(-1,ClassName+'.GetPeerAds:
gethostbyaddr()');
           FPeerNodeName := pHE^.h_name;
           if FNet.NodeByName(FPeerNodeName)=nil then
           begin
               ptr := StrScan(pHE^.h_name,'.');
               if ptr<>nil then FPeerNodeName :=
Copy(pHE^.h_name,1,ptr-pHE^.h_name);
           end;
       end;

   else
       len := AddressStrMaxLen;
       if WSAAddressToStringA(sin,sinlen,nil,buf,len)<>0 then
RaiseLastSocketError(-1,ClassName+'.GetPeerAds: WSAAddressToStringA()');
       ptr := StrRScan(buf,':');
       if ptr<>nil then len := ptr-buf;
       FPeerNodeName := Copy(buf,1,len);
   end;
   Result :=
FNet.EncodeAddress(ALogin,FPeerNodeName,'',[bLoginIdRequired,bNodeIdREquired,bR
aiseError]);
end; {TGenericNetTask.GetPeerOrigin}
 

Alex Konshin
mailto:alexk@msmt.spb.su"
(2:5030/217)
------------------------------------------------------------------------------------------------------
Хотелось бы иметь возможность отмены вставки нового узла в TTreeView по нажатию кнопки Esc. Как сделать?
CODE  
unit BetterTreeView;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, CommCtrl;

type
 TTVNewEditCancelEvent = procedure( Sender: TObject;
   Node: TTreeNode; var Delete: Boolean) of object;
 TBetterTreeView = class(TTreeView)
 protected
   FIsEditingNew: Boolean;
   FOnEditCancel: TTVChangedEvent;
   FOnNewEditCancel: TTVNewEditCancelEvent;
   procedure Edit(const Item: TTVItem); override;
 public
   function NewChildAndEdit(Node: TTreeNode; const S: String)

     : TTreeNode;
 published
   property IsEditingNew: Boolean read FIsEditingNew;
   property OnEditCancel: TTVChangedEvent
     read FOnEditCancel write FOnEditCancel;
   property OnNewEditCancel: TTVNewEditCancelEvent
     read FOnNewEditCancel write FOnNewEditCancel;
 end;

implementation

procedure TBetterTreeView.Edit(const Item: TTVItem);
var
 Node: TTreeNode;
 Action: Boolean;
begin
 with Item do begin
   { Get the node }
   if (state and TVIF_PARAM)  0 then
     Node := Pointer(lParam)

   else
     Node := Items.GetNode(hItem);

   if pszText = nil then begin
     if FIsEditingNew then begin
       Action := True;
       if Assigned(FOnNewEditCancel) then
         FOnNewEditCancel(Self, Node, Action);
       if Action then
         Node.Destroy
     end
     else
       if Assigned(FOnEditCancel) then
         FOnEditCancel(Self, Node);
   end
   else
     inherited;
 end;
 FIsEditingNew := False;
end;

function TBetterTreeView.NewChildAndEdit
 (Node: TTreeNode; const S: String): TTreeNode;

begin
 SetFocus;
 Result := Items.AddChild(Node, S);
 FIsEditingNew := True;
 Node.Expand(False);
 Result.EditText;
 SetFocus;
end;

end.
 

Автор:

StayAtHome

Взято из





Содержание раздела