/*
 * 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
 */

LANGUAGE LANG_SPANISH, SUBLANG_DEFAULT

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
