/*
 * Dutch resources for Twain
 *
 * Copyright 2006 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_CAMERAUI DIALOG DISCARDABLE  0, 0, 372, 273
STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | 
    WS_CAPTION | WS_SYSMENU
CAPTION "Bestanden op de camera"
MENU 20545
FONT 8, "MS Sans Serif"
BEGIN
	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
WS_TABSTOP,7,7,358,229
    DEFPUSHBUTTON   "Importeer geselecteerde bestanden",IDC_IMPORT,120,252,120,14
    PUSHBUTTON      "Preview",IDC_FETCH,7,252,48,14
    PUSHBUTTON      "Importeer alles",IDC_IMPORTALL,60,252,56,14
    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,244,252,76,14
    PUSHBUTTON      "Afsluiten",IDC_EXIT,315,252,50,14
END

IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE | DS_CENTER | DS_SETFOREGROUND
CAPTION "Transporteren"
FONT 8, "MS Sans Serif"
BEGIN
    LTEXT   "Transporteren.... Even geduld",IDC_STATIC,5,19,176,8, SS_CENTER
END

IDD_CONNECTING DIALOG DISCARDABLE  0, 0, 280, 116
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU| WS_VISIBLE | DS_CENTER
CAPTION "Verbinden met camera"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "",IDC_BITMAP,"Static",SS_BITMAP|SS_CENTERIMAGE,4,4,110,110
    LTEXT           "Verbinden met camera... Even geduld",IDC_STATIC,128,58,
                    116,8
END
