/*
 * Spanish resources for Twain
 *
 * Copyright 2007 Luis Carlos Busquets Pérez
 *
 * 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
 */
#pragma code_page(65001)

LANGUAGE LANG_SPANISH, 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 "Ficheros de la cámara"
MENU 20545
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
WS_TABSTOP,7,7,358,229
    DEFPUSHBUTTON   "Importar la selección",IDC_IMPORT,152,252,72,14
    PUSHBUTTON      "Previsualización",IDC_FETCH,7,252,64,14
    PUSHBUTTON      "Importar todo",IDC_IMPORTALL,80,252,64,14
    CONTROL         "Saltarse este diálogo",IDC_SKIP,"Botón", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
    PUSHBUTTON      "Salir",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 "Transfiriendo"
FONT 8, "MS Sans Serif"
BEGIN
    LTEXT   "Transfiriendo.... Por favor espere",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 "Conectando a la cámara"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL         "",IDC_BITMAP,"Static",SS_BITMAP|SS_CENTERIMAGE,4,4,110,110
    LTEXT           "Conectando a la cámara... Por favor espere",IDC_STATIC,128,58,
                    116,8
END

#pragma code_page(default)
