/*
 * wininet (Dutch resources)
 *
 * Copyright 2003 Hans Leidekker
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

IDD_PROXYDLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 250, 154
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Netwerkwachtwoord invoeren"
FONT 8, "MS Shell Dlg"
{
 LTEXT "Voer uw gebruikersnaam en wachtwoord in:", -1, 40, 6, 150, 15
 LTEXT "Proxy", -1, 40, 26, 50, 10
 LTEXT "Realm", -1, 40, 46, 50, 10
 LTEXT "Gebruikersnaam", -1, 40, 66, 50, 10
 LTEXT "Wachtwoord", -1, 40, 86, 50, 10
 LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0
 LTEXT "" IDC_REALM, 80, 46, 150, 14, 0
 EDITTEXT IDC_USERNAME, 80, 66, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
 EDITTEXT IDC_PASSWORD, 80, 86, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD
 CHECKBOX "&Wachtwoord opslaan (onveilig)", IDC_SAVEPASSWORD,
           80, 106, 150, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
 PUSHBUTTON "OK", IDOK, 98, 126, 56, 14, WS_GROUP | WS_TABSTOP | BS_DEFPUSHBUTTON
 PUSHBUTTON "Annuleren", IDCANCEL, 158, 126, 56, 14, WS_GROUP | WS_TABSTOP
}

STRINGTABLE DISCARDABLE
{
  IDS_LANCONNECTION "LAN Verbinding"
}
