
#include <Windows.h>
#include <GdiPlus.h>
#include <main.h>
#include <Prozess.h>
#include <Bildschirm.h>
#include <MausEreignis.h>
#include <TastaturEreignis.h>
#include <sstream>
#include <Punkt.h>
#include <Knopf.h>
#include <TextFeld.h>
#include <Liste.h>
#include <AlphaFeld.h>
#include <Rahmen.h>
#include <Scroll.h>
#include <Fortschritt.h>
#include <Datei.h>
#include <Zeit.h>
#include <Globals.h>

#include "Import.h"

using namespace Framework;

bool Exit = 0;

WFenster *fenster;

Knopf *_beenden;
TextFeld *_pfad;
Knopf *_laden;
LTDBDatei *_datei;
AuswahlListe *_bilder;
TextFeld *_import_Pfad;
Knopf *_import;
Knopf *_remove;
Knopf *_von_Unten;
FBalken *_fZwischenSchritt;
FBalken *_fGesamtSchritt;
TextFeld *_fZText;
TextFeld *_fGText;
BildZ *_vorschau;

TextFeld *_pfad2;
Knopf *_laden2;
LTDBDatei *_datei2;
AuswahlListe *_bilder2;
TextFeld *_import_Pfad2;
Knopf *_import2;
Knopf *_remove2;
Knopf *_von_Oben;
FBalken *_fZwischenSchritt2;
FBalken *_fGesamtSchritt2;
TextFeld *_fZText2;
TextFeld *_fGText2;
BildZ *_vorschau2;

Schrift *schriftNormal;

void HFNSchließen( void *, void *fenster )
{
    PostQuitMessage( 0 );
}

bool HFMausEvent( void *p, void *fenster, MausEreignis me )
{
    return 1;
}

bool HFTastaturEvent( void *p, void *fenster, TastaturEreignis te )
{
    return 1;
}

bool _beendenME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
        PostQuitMessage( 0 );
    return 1;
}

bool _pfadTE( void *p, void *obj, TastaturEreignis te )
{
    if( te.id == TE_Release && te.taste == T_Enter )
    {
        MausEreignis me;
        me.id = ME_RLinks;
        me.mx = _laden->getX();
        me.my = _laden->getY();
        me.verarbeitet = 0;
        _laden->doMausEreignis( me );
    }
    return 1;
}

bool _ladenME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        if( !_pfad->zText()->hat( ".ltdb" ) )
            _pfad->zText()->append( ".ltdb" );
        _datei->setDatei( _pfad->getText() );
        if( !DateiExistiert( _pfad->getText() ) )
            _datei->erstellen();
        _datei->leseDaten( _fGesamtSchritt );
        int im = _bilder->getEintragAnzahl();
        _bilder->lockZeichnung();
        for( int i = 0; i < im; i++ )
            _bilder->removeEintrag( im - 1 - i );
        RCArray< Text > *bl = _datei->zBildListe();
        im = _datei->getBildAnzahl();
        for( int i = 0; i < im; i++ )
        {
            _bilder->addEintrag( bl->z( i )->getText() );
            _bilder->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder->unlockZeichnung();
        _fGesamtSchritt->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _bilderME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        int ausw = _bilder->getAuswahl();
        int ausw2 = _bilder->getKlickEintrag( me.my );
        if( ausw == ausw2 && ausw >= 0 )
        {
            Bild *bild = _datei->laden( _fGesamtSchritt, _bilder->zEintrag( ausw )->getText() );
            _vorschau->lockZeichnung();
            _vorschau->setBildZ( bild );
            _vorschau->unlockZeichnung();
        }
        _fGesamtSchritt->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _import_PfadTE( void *p, void *obj, TastaturEreignis te )
{
    if( te.id == TE_Release && te.taste == T_Enter )
    {
        MausEreignis me;
        me.id = ME_RLinks;
        me.mx = _import->getX();
        me.my = _import->getY();
        me.verarbeitet = 0;
        _import->doMausEreignis( me );
    }
    return 1;
}

bool _importME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        if( !_datei->zBildListe() )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es ist keine Datei geoeffnet!" ), MB_ICONERROR );
            return 1;
        }
        Text * pf = _import_Pfad->zText();
        if( !DateiExistiert( pf->getThis() ) )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Unter dem angegebenen Pfad wurde nichts gefunden!" ), MB_ICONERROR );
            return 1;
        }
        _bilder->lockZeichnung();
        int im = _bilder->getEintragAnzahl();
        for( int i = 0; i < im; i++ )
            _bilder->removeEintrag( im - 1 - i );
        _bilder->unlockZeichnung();
        if( !DateiIstVerzeichnis( pf->getThis() ) )
        {
            pf->ersetzen( '/', '\\' );
            Text *name = pf->getTeilText( pf->positionVon( '\\', pf->anzahlVon( '\\' ) - 1 ) + 1 );
            _datei->speichern( _fGesamtSchritt, ladeBild( pf ), name );
        }
        else
        {
            _fGesamtSchritt->reset();
            _fGesamtSchritt->setAktionAnzahl( countVerzeichnis( pf->getThis() ) );
            ladeVerzeichnis( pf->getThis(), schriftNormal, _datei, _fZwischenSchritt, _fGesamtSchritt );
        }
        RCArray< Text > *bl = _datei->zBildListe();
        im = _datei->getBildAnzahl();
        _bilder->lockZeichnung();
        for( int i = 0; i < im; i++ )
        {
            _bilder->addEintrag( bl->z( i )->getText() );
            _bilder->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder->unlockZeichnung();
        _fZwischenSchritt->reset();
        _fGesamtSchritt->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _removeME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        int ausw = _bilder->getAuswahl();
        if( ausw < 0 || ausw > _bilder->getEintragAnzahl() )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es is kein Bild ausgewaehlt!" ), MB_ICONERROR );
            return 1;
        }
        _datei->remove( _fGesamtSchritt, _bilder->zEintrag( ausw )->getText() );
        _bilder->lockZeichnung();
        int im = _bilder->getEintragAnzahl();
        for( int i = 0; i < im; i++ )
            _bilder->removeEintrag( im - i - 1 );
        RCArray< Text > *bl = _datei->zBildListe();
        im = _datei->getBildAnzahl();
        for( int i = 0; i < im; i++ )
        {
            _bilder->addEintrag( bl->z( i )->getText() );
            _bilder->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder->unlockZeichnung();
        _fGesamtSchritt->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _von_UntenME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        if( !DateiExistiert( _datei->getPfad() ) || !DateiExistiert( _datei2->getPfad() ) )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es ist keine Datei geoeffnet!" ), MB_ICONERROR );
            return 1;
        }
        int ausw = _bilder2->getAuswahl();
        if( ausw < 0 || ausw > _bilder2->getEintragAnzahl() )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es is kein Bild ausgewaehlt!" ), MB_ICONERROR );
            return 1;
        }
        Bild *bild = _datei2->laden( _fZwischenSchritt, _bilder2->zEintrag( ausw )->getText() );
        _datei->speichern( _fGesamtSchritt, bild, _bilder2->zEintrag( ausw )->getText() );
        _bilder->lockZeichnung();
        int im = _bilder->getEintragAnzahl();
        for( int i = 0; i < im; i++ )
            _bilder->removeEintrag( im - i - 1 );
        RCArray< Text > *bl = _datei->zBildListe();
        im = _datei->getBildAnzahl();
        for( int i = 0; i < im; i++ )
        {
            _bilder->addEintrag( bl->z( i )->getText() );
            _bilder->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder->unlockZeichnung();
        _fZwischenSchritt->reset();
        _fGesamtSchritt->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _pfad2TE( void *p, void *obj, TastaturEreignis te )
{
    if( te.id == TE_Release && te.taste == T_Enter )
    {
        MausEreignis me;
        me.id = ME_RLinks;
        me.mx = _laden2->getX();
        me.my = _laden2->getY();
        me.verarbeitet = 0;
        _laden2->doMausEreignis( me );
    }
    return 1;
}

bool _laden2ME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        if( !_pfad2->zText()->hat( ".ltdb" ) )
            _pfad2->zText()->append( ".ltdb" );
        _datei2->setDatei( _pfad2->getText() );
        if( !DateiExistiert( _pfad2->getText() ) )
            _datei2->erstellen();
        _datei2->leseDaten( _fGesamtSchritt2 );
        int im = _bilder2->getEintragAnzahl();
        _bilder2->lockZeichnung();
        for( int i = 0; i < im; i++ )
            _bilder2->removeEintrag( im - 1 - i );
        RCArray< Text > *bl = _datei2->zBildListe();
        im = _datei2->getBildAnzahl();
        for( int i = 0; i < im; i++ )
        {
            _bilder2->addEintrag( bl->z( i )->getText() );
            _bilder2->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder2->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder2->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder2->unlockZeichnung();
        _fGesamtSchritt2->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _bilder2ME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        int ausw = _bilder2->getAuswahl();
        int ausw2 = _bilder2->getKlickEintrag( me.my );
        if( ausw == ausw2 && ausw >= 0 )
        {
            Bild *bild = _datei2->laden( _fGesamtSchritt2, _bilder2->zEintrag( ausw )->getText() );
            _vorschau2->lockZeichnung();
            _vorschau2->setBildZ( bild );
            _vorschau2->unlockZeichnung();
        }
        _fGesamtSchritt2->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _import_Pfad2TE( void *p, void *obj, TastaturEreignis te )
{
    if( te.id == TE_Release && te.taste == T_Enter )
    {
        MausEreignis me;
        me.id = ME_RLinks;
        me.mx = _import2->getX();
        me.my = _import2->getY();
        me.verarbeitet = 0;
        _import2->doMausEreignis( me );
    }
    return 1;
}

bool _import2ME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        if( !_datei2->zBildListe() )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es ist keine Datei geoeffnet!" ), MB_ICONERROR );
            return 1;
        }
        Text * pf = _import_Pfad2->zText();
        if( !DateiExistiert( pf->getThis() ) )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Unter dem angegebenen Pfad wurde nichts gefunden!" ), MB_ICONERROR );
            return 1;
        }
        _bilder2->lockZeichnung();
        int im = _bilder2->getEintragAnzahl();
        for( int i = 0; i < im; i++ )
            _bilder2->removeEintrag( im - 1 - i );
        _bilder2->unlockZeichnung();
        if( !DateiIstVerzeichnis( pf->getThis() ) )
        {
            pf->ersetzen( '/', '\\' );
            Text *name = pf->getTeilText( pf->positionVon( '\\', pf->anzahlVon( '\\' ) - 1 ) + 1 );
            _datei2->speichern( _fGesamtSchritt2, ladeBild( pf ), name );
        }
        else
        {
            _fGesamtSchritt2->reset();
            _fGesamtSchritt2->setAktionAnzahl( countVerzeichnis( pf->getThis() ) );
            ladeVerzeichnis( pf->getThis(), schriftNormal, _datei2, _fZwischenSchritt2, _fGesamtSchritt2 );
        }
        RCArray< Text > *bl = _datei2->zBildListe();
        im = _datei2->getBildAnzahl();
        _bilder2->lockZeichnung();
        for( int i = 0; i < im; i++ )
        {
            _bilder2->addEintrag( bl->z( i )->getText() );
            _bilder2->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder2->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder2->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder2->unlockZeichnung();
        _fZwischenSchritt2->reset();
        _fGesamtSchritt2->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _remove2ME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        int ausw = _bilder2->getAuswahl();
        if( ausw < 0 || ausw > _bilder2->getEintragAnzahl() )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es is kein Bild ausgewaehlt!" ), MB_ICONERROR );
            return 1;
        }
        _datei2->remove( _fGesamtSchritt2, _bilder2->zEintrag( ausw )->getText() );
        _bilder2->lockZeichnung();
        int im = _bilder2->getEintragAnzahl();
        for( int i = 0; i < im; i++ )
            _bilder2->removeEintrag( im - i - 1 );
        RCArray< Text > *bl = _datei2->zBildListe();
        im = _datei2->getBildAnzahl();
        for( int i = 0; i < im; i++ )
        {
            _bilder2->addEintrag( bl->z( i )->getText() );
            _bilder2->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder2->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder2->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder2->unlockZeichnung();
        _fGesamtSchritt2->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

bool _von_ObenME( void *p, void *obj, MausEreignis me )
{
    if( me.id == ME_RLinks )
    {
        fenster->zBildschirm()->unlock();
        if( !DateiExistiert( _datei->getPfad() ) || !DateiExistiert( _datei2->getPfad() ) )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es ist keine Datei geoeffnet!" ), MB_ICONERROR );
            return 1;
        }
        int ausw = _bilder->getAuswahl();
        if( ausw < 0 || ausw > _bilder->getEintragAnzahl() )
        {
            WMessageBox( 0, new Text( "Error" ), new Text( "Es is kein Bild ausgewaehlt!" ), MB_ICONERROR );
            return 1;
        }
        Bild *bild = _datei->laden( _fZwischenSchritt2, _bilder->zEintrag( ausw )->getText() );
        _datei2->speichern( _fGesamtSchritt2, bild, _bilder->zEintrag( ausw )->getText() );
        _bilder2->lockZeichnung();
        int im = _bilder2->getEintragAnzahl();
        for( int i = 0; i < im; i++ )
            _bilder2->removeEintrag( im - i - 1 );
        RCArray< Text > *bl = _datei2->zBildListe();
        im = _datei2->getBildAnzahl();
        for( int i = 0; i < im; i++ )
        {
            _bilder2->addEintrag( bl->z( i )->getText() );
            _bilder2->zEintrag( i )->setSchriftZ( schriftNormal->getThis() );
            _bilder2->zEintrag( i )->setSchriftFarbe( 0xFFFFFFFF );
            _bilder2->zEintrag( i )->setSize( 0, 20 );
        }
        _bilder2->unlockZeichnung();
        _fZwischenSchritt2->reset();
        _fGesamtSchritt2->reset();
        fenster->zBildschirm()->lock();
    }
    return 1;
}

DWORD WINAPI runThread( LPVOID args )
{
    Bildschirm *screen = (Bildschirm *)args;
    ZeitMesser time;
    while( !Exit )
    {
        double tv = time.getSekunden();
        time.messungStart();
        screen->tick( tv );
        screen->render();
        if( tv < 1.0 / 30.0 )
            Sleep( (int)( ( 1.0 / 30.0 - tv ) * 1000 ) );
        time.messungEnde();
    }
    return 0;
}

int KSGStart Framework::Start( Startparam p )
{
    Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR gdiplusToken;
    Gdiplus::GdiplusStartup( &gdiplusToken, &gdiplusStartupInput, 0 );

    WNDCLASS wc = F_Normal( p.hinst );
    wc.lpszClassName = "LTDB Konverter - LENCK TECH";
    WFenster *HauptFenster = new WFenster();
    fenster = HauptFenster;
    HauptFenster->setVerschiebbar( 1 );
    HauptFenster->erstellen( WS_POPUP, wc );
    HauptFenster->setAnzeigeModus( p.show );
    HauptFenster->setMausAktion( HFMausEvent );
    HauptFenster->setNSchließAktion( HFNSchließen );
    HauptFenster->setTastaturAktion( HFTastaturEvent );
    HauptFenster->setSize( 700, 700 );
    HauptFenster->setPosition( Bildschirmmitte( HauptFenster->getThis() ) );

    Bildschirm *HFscreen = new Bildschirm3D( HauptFenster->getThis() );
    HauptFenster->setBildschirm( HFscreen->getThis() );
    HFscreen->update();
    HFscreen->render();

    LTDSDatei *schriftDatei = new LTDSDatei();
    schriftDatei->setPfad( new Text( "../Data/normal.ltds" ) );
    schriftDatei->leseDaten();
    schriftNormal = schriftDatei->ladeSchrift();
    schriftDatei->release();

    _datei = new LTDBDatei();

    _beenden = new Knopf();
    _beenden->setSchriftZ( schriftNormal->getThis() );
    _beenden->setText( "Programm beenden" );
    _beenden->setSchriftFarbe( 0xFFFFFFFF );
    _beenden->setSchriftSize( 12 );
    _beenden->setRahmenBreite( 2 );
    _beenden->setRahmenFarbe( 0xFF00FF00 );
    _beenden->setAlphaFeldFarbe( 0x5500FF00 );
    _beenden->setAlphaFeldStrength( -5 );
    _beenden->setKBFarbe( 0xFF000000 );
    _beenden->setKBStrength( 20 );
    _beenden->setMausEreignis( _beendenME );
    _beenden->setTastaturEreignis( 0 );
    _beenden->setSize( 130, 30 );
    _beenden->setPosition( 10, 10 );
    _beenden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _beenden );

    _pfad = new TextFeld();
    _pfad->setSchriftZ( schriftNormal->getThis() );
    _pfad->setText( "Dateipfad" );
    _pfad->setSchriftFarbe( 0xFFFFFFFF );
    _pfad->setSchriftSize( 12 );
    _pfad->setAlphaFeldFarbe( 0x5500FF00 );
    _pfad->setAlphaFeldStrength( -5 );
    _pfad->setRahmenBreite( 1 );
    _pfad->setRahmenFarbe( 0xFF00FF00 );
    _pfad->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::Center | TextFeld::Style::Erlaubt );
    _pfad->setSize( 400, 20 );
    _pfad->setPosition( 150, 15 );
    _pfad->setTastaturEreignis( _pfadTE );
    HFscreen->addMember( _pfad );

    _laden = new Knopf();
    _laden->setSchriftZ( schriftNormal->getThis() );
    _laden->setText( "Datei laden" );
    _laden->setSchriftFarbe( 0xFFFFFFFF );
    _laden->setSchriftSize( 12 );
    _laden->setRahmenBreite( 2 );
    _laden->setRahmenFarbe( 0xFF00FF00 );
    _laden->setAlphaFeldFarbe( 0x5500FF00 );
    _laden->setAlphaFeldStrength( -5 );
    _laden->setKBFarbe( 0xFF000000 );
    _laden->setKBStrength( 20 );
    _laden->setMausEreignis( _ladenME );
    _laden->setTastaturEreignis( 0 );
    _laden->setSize( 130, 30 );
    _laden->setPosition( 560, 10 );
    _laden->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _laden );

    _bilder = new AuswahlListe();
    _bilder->setStyle( AuswahlListe::Style::Sichtbar | AuswahlListe::Style::Rahmen | AuswahlListe::Style::Erlaubt | AuswahlListe::Style::AuswahlBuffer | AuswahlListe::Style::AuswahlRahmen | AuswahlListe::Style::VScroll );
    _bilder->setAAFZ( new AlphaFeld() );
    _bilder->zABuffer()->setFarbe( 0x7500FF00 );
    _bilder->zABuffer()->setStrength( 8 );
    _bilder->setRahmenFarbe( 0xFFFFFFFF );
    _bilder->setRahmenBreite( 2 );
    _bilder->setALRZ( new LRahmen() );
    _bilder->zARahmen()->setFarbe( 0xFF00FF00 );
    _bilder->setPosition( 10, 50 );
    _bilder->setSize( 120, 290 );
    _bilder->setVertikalKlickScroll( 5 );
    _bilder->setMausEreignis( _bilderME );
    _bilder->update();
    HFscreen->addMember( _bilder );

    _import_Pfad = new TextFeld();
    _import_Pfad->setSchriftZ( schriftNormal->getThis() );
    _import_Pfad->setText( "Import Pfad" );
    _import_Pfad->setSchriftFarbe( 0xFFFFFFFF );
    _import_Pfad->setSchriftSize( 12 );
    _import_Pfad->setAlphaFeldFarbe( 0x5500FF00 );
    _import_Pfad->setAlphaFeldStrength( -5 );
    _import_Pfad->setRahmenBreite( 1 );
    _import_Pfad->setRahmenFarbe( 0xFF00FF00 );
    _import_Pfad->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::Center | TextFeld::Style::Erlaubt );
    _import_Pfad->setSize( 200, 20 );
    _import_Pfad->setPosition( 140, 60 );
    _import_Pfad->setTastaturEreignis( _import_PfadTE );
    HFscreen->addMember( _import_Pfad );

    _import = new Knopf();
    _import->setSchriftZ( schriftNormal->getThis() );
    _import->setText( "Importieren" );
    _import->setSchriftFarbe( 0xFFFFFFFF );
    _import->setSchriftSize( 12 );
    _import->setRahmenBreite( 2 );
    _import->setRahmenFarbe( 0xFF00FF00 );
    _import->setAlphaFeldFarbe( 0x5500FF00 );
    _import->setAlphaFeldStrength( -5 );
    _import->setKBFarbe( 0xFF000000 );
    _import->setKBStrength( 20 );
    _import->setMausEreignis( _importME );
    _import->setTastaturEreignis( 0 );
    _import->setSize( 130, 30 );
    _import->setPosition( 175, 90 );
    _import->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _import );

    _remove = new Knopf();
    _remove->setSchriftZ( schriftNormal->getThis() );
    _remove->setText( "Löschen" );
    _remove->setSchriftFarbe( 0xFFFFFFFF );
    _remove->setSchriftSize( 12 );
    _remove->setRahmenBreite( 2 );
    _remove->setRahmenFarbe( 0xFF00FF00 );
    _remove->setAlphaFeldFarbe( 0x5500FF00 );
    _remove->setAlphaFeldStrength( -5 );
    _remove->setKBFarbe( 0xFF000000 );
    _remove->setKBStrength( 20 );
    _remove->setMausEreignis( _removeME );
    _remove->setTastaturEreignis( 0 );
    _remove->setSize( 130, 30 );
    _remove->setPosition( 175, 130 );
    _remove->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _remove );

    _von_Unten = new Knopf();
    _von_Unten->setSchriftZ( schriftNormal->getThis() );
    _von_Unten->setText( "von Unten" );
    _von_Unten->setSchriftFarbe( 0xFFFFFFFF );
    _von_Unten->setSchriftSize( 12 );
    _von_Unten->setRahmenBreite( 2 );
    _von_Unten->setRahmenFarbe( 0xFF00FF00 );
    _von_Unten->setAlphaFeldFarbe( 0x5500FF00 );
    _von_Unten->setAlphaFeldStrength( -5 );
    _von_Unten->setKBFarbe( 0xFF000000 );
    _von_Unten->setKBStrength( 20 );
    _von_Unten->setMausEreignis( _von_UntenME );
    _von_Unten->setTastaturEreignis( 0 );
    _von_Unten->setSize( 130, 30 );
    _von_Unten->setPosition( 175, 170 );
    _von_Unten->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _von_Unten );

    _fZText = new TextFeld();
    _fZText->setStyle( TextFeld::Style::Sichtbar );
    _fZText->setText( "Zwischenfortschritt:" );
    _fZText->setSchriftZ( schriftNormal->getThis() );
    _fZText->setSchriftFarbe( 0xFFFFFFFF );
    _fZText->setSize( 200, 15 );
    _fZText->setPosition( 140, 245 );
    HFscreen->addMember( _fZText );

    _fZwischenSchritt = new FBalken();
    _fZwischenSchritt->setStyle( FBalken::Style::Sichtbar | FBalken::Style::Prozent | FBalken::Style::Rahmen | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::L_R );
    _fZwischenSchritt->setRahmenFarbe( 0xFFFFFFFF );
    _fZwischenSchritt->setHintergrundFarbe( 0xFF005000 );
    _fZwischenSchritt->setFBgFarbe( 0xFF00FF00 );
    _fZwischenSchritt->setAktionAnzahl( 100 );
    _fZwischenSchritt->setSchriftZ( schriftNormal->getThis() );
    _fZwischenSchritt->setSFarbe( 0xFFFFFFFF );
    _fZwischenSchritt->setSSize( 12 );
    _fZwischenSchritt->setSize( 200, 20 );
    _fZwischenSchritt->setPosition( 140, 260 );
    HFscreen->addMember( _fZwischenSchritt );

    _fGText = new TextFeld();
    _fGText->setStyle( TextFeld::Style::Sichtbar );
    _fGText->setText( "Gesamtfortschritt:" );
    _fGText->setSchriftZ( schriftNormal->getThis() );
    _fGText->setSchriftFarbe( 0xFFFFFFFF );
    _fGText->setSize( 200, 15 );
    _fGText->setPosition( 140, 295 );
    HFscreen->addMember( _fGText );

    _fGesamtSchritt = new FBalken();
    _fGesamtSchritt->setStyle( FBalken::Style::Sichtbar | FBalken::Style::Prozent | FBalken::Style::Rahmen | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::L_R );
    _fGesamtSchritt->setRahmenFarbe( 0xFFFFFFFF );
    _fGesamtSchritt->setHintergrundFarbe( 0xFF005000 );
    _fGesamtSchritt->setFBgFarbe( 0xFF00FF00 );
    _fGesamtSchritt->setAktionAnzahl( 100 );
    _fGesamtSchritt->setSchriftZ( schriftNormal->getThis() );
    _fGesamtSchritt->setSFarbe( 0xFFFFFFFF );
    _fGesamtSchritt->setSSize( 12 );
    _fGesamtSchritt->setSize( 200, 20 );
    _fGesamtSchritt->setPosition( 140, 310 );
    HFscreen->addMember( _fGesamtSchritt );

    _vorschau = new BildZ();
    _vorschau->setStyle( BildZ::Style::normal | BildZ::Style::Alpha );
    _vorschau->setRahmenFarbe( 0xFFFFFFFF );
    _vorschau->setRahmenBreite( 2 );
    _vorschau->setSize( 340, 290 );
    _vorschau->setPosition( 350, 50 );
    _vorschau->setMausEreignis( _ret1ME );
    HFscreen->addMember( _vorschau );

    _datei2 = new LTDBDatei();

    _pfad2 = new TextFeld();
    _pfad2->setSchriftZ( schriftNormal->getThis() );
    _pfad2->setText( "Dateipfad" );
    _pfad2->setSchriftFarbe( 0xFFFFFFFF );
    _pfad2->setSchriftSize( 12 );
    _pfad2->setAlphaFeldFarbe( 0x5500FF00 );
    _pfad2->setAlphaFeldStrength( -5 );
    _pfad2->setRahmenBreite( 1 );
    _pfad2->setRahmenFarbe( 0xFF00FF00 );
    _pfad2->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::Center | TextFeld::Style::Erlaubt );
    _pfad2->setSize( 540, 20 );
    _pfad2->setPosition( 10, 355 );
    _pfad2->setTastaturEreignis( _pfad2TE );
    HFscreen->addMember( _pfad2 );

    _laden2 = new Knopf();
    _laden2->setSchriftZ( schriftNormal->getThis() );
    _laden2->setText( "Datei laden" );
    _laden2->setSchriftFarbe( 0xFFFFFFFF );
    _laden2->setSchriftSize( 12 );
    _laden2->setRahmenBreite( 2 );
    _laden2->setRahmenFarbe( 0xFF00FF00 );
    _laden2->setAlphaFeldFarbe( 0x5500FF00 );
    _laden2->setAlphaFeldStrength( -5 );
    _laden2->setKBFarbe( 0xFF000000 );
    _laden2->setKBStrength( 20 );
    _laden2->setMausEreignis( _laden2ME );
    _laden2->setTastaturEreignis( 0 );
    _laden2->setSize( 130, 30 );
    _laden2->setPosition( 560, 350 );
    _laden2->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _laden2 );

    _bilder2 = new AuswahlListe();
    _bilder2->setStyle( AuswahlListe::Style::Sichtbar | AuswahlListe::Style::Rahmen | AuswahlListe::Style::Erlaubt | AuswahlListe::Style::AuswahlBuffer | AuswahlListe::Style::AuswahlRahmen | AuswahlListe::Style::VScroll );
    _bilder2->setAAFZ( new AlphaFeld() );
    _bilder2->zABuffer()->setFarbe( 0x7500FF00 );
    _bilder2->zABuffer()->setStrength( 8 );
    _bilder2->setRahmenFarbe( 0xFFFFFFFF );
    _bilder2->setRahmenBreite( 2 );
    _bilder2->setALRZ( new LRahmen() );
    _bilder2->zARahmen()->setFarbe( 0xFF00FF00 );
    _bilder2->setSize( 120, 300 );
    _bilder2->setPosition( 10, 390 );
    _bilder2->setVertikalKlickScroll( 5 );
    _bilder2->setMausEreignis( _bilder2ME );
    _bilder2->update();
    HFscreen->addMember( _bilder2 );

    _import_Pfad2 = new TextFeld();
    _import_Pfad2->setSchriftZ( schriftNormal->getThis() );
    _import_Pfad2->setText( "Import Pfad" );
    _import_Pfad2->setSchriftFarbe( 0xFFFFFFFF );
    _import_Pfad2->setSchriftSize( 12 );
    _import_Pfad2->setAlphaFeldFarbe( 0x5500FF00 );
    _import_Pfad2->setAlphaFeldStrength( -5 );
    _import_Pfad2->setRahmenBreite( 1 );
    _import_Pfad2->setRahmenFarbe( 0xFF00FF00 );
    _import_Pfad2->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Rahmen | TextFeld::Style::Buffered | TextFeld::Style::Center | TextFeld::Style::Erlaubt );
    _import_Pfad2->setSize( 200, 20 );
    _import_Pfad2->setPosition( 140, 400 );
    _import_Pfad2->setTastaturEreignis( _import_Pfad2TE );
    HFscreen->addMember( _import_Pfad2 );

    _import2 = new Knopf();
    _import2->setSchriftZ( schriftNormal->getThis() );
    _import2->setText( "Importieren" );
    _import2->setSchriftFarbe( 0xFFFFFFFF );
    _import2->setSchriftSize( 12 );
    _import2->setRahmenBreite( 2 );
    _import2->setRahmenFarbe( 0xFF00FF00 );
    _import2->setAlphaFeldFarbe( 0x5500FF00 );
    _import2->setAlphaFeldStrength( -5 );
    _import2->setKBFarbe( 0xFF000000 );
    _import2->setKBStrength( 20 );
    _import2->setMausEreignis( _import2ME );
    _import2->setTastaturEreignis( 0 );
    _import2->setSize( 130, 30 );
    _import2->setPosition( 175, 430 );
    _import2->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _import2 );

    _remove2 = new Knopf();
    _remove2->setSchriftZ( schriftNormal->getThis() );
    _remove2->setText( "Löschen" );
    _remove2->setSchriftFarbe( 0xFFFFFFFF );
    _remove2->setSchriftSize( 12 );
    _remove2->setRahmenBreite( 2 );
    _remove2->setRahmenFarbe( 0xFF00FF00 );
    _remove2->setAlphaFeldFarbe( 0x5500FF00 );
    _remove2->setAlphaFeldStrength( -5 );
    _remove2->setKBFarbe( 0xFF000000 );
    _remove2->setKBStrength( 20 );
    _remove2->setMausEreignis( _remove2ME );
    _remove2->setTastaturEreignis( 0 );
    _remove2->setSize( 130, 30 );
    _remove2->setPosition( 175, 470 );
    _remove2->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _remove2 );

    _von_Oben = new Knopf();
    _von_Oben->setSchriftZ( schriftNormal->getThis() );
    _von_Oben->setText( "von Oben" );
    _von_Oben->setSchriftFarbe( 0xFFFFFFFF );
    _von_Oben->setSchriftSize( 12 );
    _von_Oben->setRahmenBreite( 2 );
    _von_Oben->setRahmenFarbe( 0xFF00FF00 );
    _von_Oben->setAlphaFeldFarbe( 0x5500FF00 );
    _von_Oben->setAlphaFeldStrength( -5 );
    _von_Oben->setKBFarbe( 0xFF000000 );
    _von_Oben->setKBStrength( 20 );
    _von_Oben->setMausEreignis( _von_ObenME );
    _von_Oben->setTastaturEreignis( 0 );
    _von_Oben->setSize( 130, 30 );
    _von_Oben->setPosition( 175, 510 );
    _von_Oben->setStyle( Knopf::Style::Sichtbar | Knopf::Style::Erlaubt | Knopf::Style::Buffered | Knopf::Style::KlickBuffer | Knopf::Style::Rahmen );
    HFscreen->addMember( _von_Oben );

    _fZText2 = new TextFeld();
    _fZText2->setStyle( TextFeld::Style::Sichtbar );
    _fZText2->setText( "Zwischenfortschritt:" );
    _fZText2->setSchriftZ( schriftNormal->getThis() );
    _fZText2->setSchriftFarbe( 0xFFFFFFFF );
    _fZText2->setSize( 200, 15 );
    _fZText2->setPosition( 140, 585 );
    HFscreen->addMember( _fZText2 );

    _fZwischenSchritt2 = new FBalken();
    _fZwischenSchritt2->setStyle( FBalken::Style::Sichtbar | FBalken::Style::Prozent | FBalken::Style::Rahmen | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::L_R );
    _fZwischenSchritt2->setRahmenFarbe( 0xFFFFFFFF );
    _fZwischenSchritt2->setHintergrundFarbe( 0xFF005000 );
    _fZwischenSchritt2->setFBgFarbe( 0xFF00FF00 );
    _fZwischenSchritt2->setAktionAnzahl( 100 );
    _fZwischenSchritt2->setSchriftZ( schriftNormal->getThis() );
    _fZwischenSchritt2->setSFarbe( 0xFFFFFFFF );
    _fZwischenSchritt2->setSSize( 12 );
    _fZwischenSchritt2->setSize( 200, 20 );
    _fZwischenSchritt2->setPosition( 140, 600 );
    HFscreen->addMember( _fZwischenSchritt2 );

    _fGText2 = new TextFeld();
    _fGText2->setStyle( TextFeld::Style::Sichtbar );
    _fGText2->setText( "Gesamtfortschritt:" );
    _fGText2->setSchriftZ( schriftNormal->getThis() );
    _fGText2->setSchriftFarbe( 0xFFFFFFFF );
    _fGText2->setSize( 200, 15 );
    _fGText2->setPosition( 140, 645 );
    HFscreen->addMember( _fGText2 );

    _fGesamtSchritt2 = new FBalken();
    _fGesamtSchritt2->setStyle( FBalken::Style::Sichtbar | FBalken::Style::Prozent | FBalken::Style::Rahmen | FBalken::Style::Hintergrund | FBalken::Style::FFarbe | FBalken::Style::L_R );
    _fGesamtSchritt2->setRahmenFarbe( 0xFFFFFFFF );
    _fGesamtSchritt2->setHintergrundFarbe( 0xFF005000 );
    _fGesamtSchritt2->setFBgFarbe( 0xFF00FF00 );
    _fGesamtSchritt2->setAktionAnzahl( 100 );
    _fGesamtSchritt2->setSchriftZ( schriftNormal->getThis() );
    _fGesamtSchritt2->setSFarbe( 0xFFFFFFFF );
    _fGesamtSchritt2->setSSize( 12 );
    _fGesamtSchritt2->setSize( 200, 20 );
    _fGesamtSchritt2->setPosition( 140, 660 );
    HFscreen->addMember( _fGesamtSchritt2 );

    _vorschau2 = new BildZ();
    _vorschau2->setStyle( BildZ::Style::normal | BildZ::Style::Alpha );
    _vorschau2->setRahmenFarbe( 0xFFFFFFFF );
    _vorschau2->setRahmenBreite( 2 );
    _vorschau2->setSize( 340, 300 );
    _vorschau2->setPosition( 350, 390 );
    _vorschau2->setMausEreignis( _ret1ME );
    HFscreen->addMember( _vorschau2 );

    DWORD threadId;
    HANDLE tHandle = CreateThread( 0, 0, runThread, HFscreen, 0, &threadId );

    Framework::StartNachrichtenSchleife();

    Exit = 1;
    WaitForSingleObject( tHandle, INFINITE );

    _datei->release();
    _datei2->release();

    schriftNormal->release();

    HFscreen->release();
    HauptFenster->setBildschirm( 0 );
    HauptFenster->release();

    return 0;
}