/*
 * Uninstaller (Dutch Resources)
 *
 * 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_UNINSTALLER DIALOG DISCARDABLE  0, 0, 330, 160
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Programma verwijderen"
FONT 10, "MS Sans Serif"
BEGIN
    LTEXT           "Kies het programma dat u wenst te verwijderen:",IDC_PLEASESELECT,10,10,250,14
    EDITTEXT        IDC_FILTER,10,25,250,14,ES_AUTOHSCROLL
    LISTBOX         IDC_LIST,10,43,250,106,LBS_NOINTEGRALHEIGHT | 
                    LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
    PUSHBUTTON      "&Verwijderen",IDC_UNINSTALL,270,48,50,14
    PUSHBUTTON      "&Info",IDC_ABOUT,270,65,50,14
    PUSHBUTTON      "&Afsluiten",IDC_EXIT,270,81,50,14
END


STRINGTABLE DISCARDABLE {
     IDS_APPNAME, "Programma verwijderen"
     IDS_ABOUT, "Programma verwijderen (C) 2005 by Andreas Mohr, Hannu Valtonen and Jonathan Ernst."
     IDS_ABOUTTITLE, "Info"
     IDS_REGISTRYKEYNOTAVAILABLE, "Verwijdersleutel in de registry is (nog) niet beschikbaar, niets te doen!"
     IDS_UNINSTALLFAILED, "Het uitvoeren van de verwijderopdracht '%s' is mislukt, wellicht vanwege een ontbrekend bestand.\r\nWilt u de verwijdersleutel verwijderen uit de registry?"
}
