procedure TForm1.ButtonIPClick(Sender: TObject);
  type
    TaPInAddr = Array[0..10] of PInAddr;
    PaPInAddr = ^TaPInAddr;
  var
    phe: PHostEnt;
    pptr: PaPInAddr;
    Buffer: Array[0..63] of Char;
    I: Integer;
    GInitData: TWSAData;
    IP: String;
begin
    Screen.Cursor := crHourGlass;
    try
      WSAStartup($101, GInitData);
      IP:='0.0.0.0';
      GetHostName(Buffer, SizeOf(Buffer));
      phe := GetHostByName(buffer);
      if phe = nil then
      begin
        ShowMessage(IP);
        Exit;
      end;
      pPtr := PaPInAddr(phe^.h_addr_list);
      I := 0;
      while pPtr^[I] <> nil do
       begin
        IP := inet_ntoa(pptr^[I]^);
        Inc(I);
       end;
      WSACleanup;
      ShowMessage(IP);
    finally
      Screen.Cursor := crDefault;
    end;
end;