ソースを参照

fix compiler errors

Kolja Strohm 3 年 前
コミット
598e7a6b80
5 ファイル変更259 行追加293 行削除
  1. 54 72
      SMP/Programm/Beenden/Beenden.cpp
  2. 10 16
      SMP/Programm/Beenden/Beenden.h
  3. 19 27
      SMP/Render/Render.cpp
  4. 0 2
      SMP/Render/Render.h
  5. 176 176
      SMP/Start/Start.cpp

+ 54 - 72
SMP/Programm/Beenden/Beenden.cpp

@@ -6,104 +6,86 @@
 // Inhalt der Beenden Klasse aus Beenden.h
 // Konstruktor
 Beenden::Beenden( Schrift *s, Bildschirm *b )
-: Abschnitt( b )
+    : Abschnitt( b )
 {
-	f = new Fenster();
-	f->setStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Titel | Fenster::Style::Rahmen | Fenster::Style::TitelBuffered );
-	f->setRFarbe( 0xFFFFFFFF );
-	f->setRBreite( 1 );
-	f->setTitel( "Beenden" );
-	f->setTAfFarbe( 0x1000FF00 );
-	f->setTAfStrength( -15 );
-	f->setTRBreite( 1 );
-	f->setTRFarbe( 0xFFFFFFFF );
-	f->zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Rahmen );
-	f->zTTextFeld()->setSize( 0, 20 );
-	f->setTSchriftZ( s->getThis() );
-	f->setTSFarbe( 0xFFFFFFFF );
-	f->setSize( 300, 150 );
+    f = new Fenster();
+    f->setStyle( Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Titel | Fenster::Style::Rahmen | Fenster::Style::TitelBuffered );
+    f->setRFarbe( 0xFFFFFFFF );
+    f->setRBreite( 1 );
+    f->setTitel( "Beenden" );
+    f->setTAfFarbe( 0x1000FF00 );
+    f->setTAfStrength( -15 );
+    f->setTRBreite( 1 );
+    f->setTRFarbe( 0xFFFFFFFF );
+    f->zTTextFeld()->addStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Center | TextFeld::Style::Rahmen );
+    f->zTTextFeld()->setSize( 0, 20 );
+    f->setTSchriftZ( dynamic_cast<Schrift *>( s->getThis() ) );
+    f->setTSFarbe( 0xFFFFFFFF );
+    f->setSize( 300, 150 );
 
     TextFeld *text = new TextFeld();
-	text->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Mehrzeilig );
-	text->setText( "Möchtest du das SMP wirklich beenden?" );
-	text->setPosition( 10, 10 );
-	text->setSize( 280, 70 );
-	text->setSchriftZ( s->getThis() );
-	text->setSchriftSize( 12 );
-	text->setSchriftFarbe( 0xFFFFFFFF );
-	f->addMember( text );
+    text->setStyle( TextFeld::Style::Sichtbar | TextFeld::Style::Mehrzeilig );
+    text->setText( "Möchtest du das SMP wirklich beenden?" );
+    text->setPosition( 10, 10 );
+    text->setSize( 280, 70 );
+    text->setSchriftZ( dynamic_cast<Schrift *>( s->getThis() ) );
+    text->setSchriftSize( 12 );
+    text->setSchriftFarbe( 0xFFFFFFFF );
+    f->addMember( text );
 
-	Knopf *beenden = new Knopf( );
-	beenden->setStyle( Knopf::Style::Normal );
-	beenden->setText( "Beenden" );
-	beenden->setSchriftZ( s->getThis() );
-	beenden->setSize( 100, 20 );
-	beenden->setPosition( 190, 100 );
-	beenden->setMausEreignisParameter( this );
-	beenden->setMausEreignis( beendenBeendenMausEreignis );
-	f->addMember( beenden );
+    Knopf *beenden = new Knopf();
+    beenden->setStyle( Knopf::Style::Normal );
+    beenden->setText( "Beenden" );
+    beenden->setSchriftZ( dynamic_cast<Schrift *>( s->getThis() ) );
+    beenden->setSize( 100, 20 );
+    beenden->setPosition( 190, 100 );
+    beenden->setMausEreignisParameter( this );
+    beenden->setMausEreignis( beendenBeendenMausEreignis );
+    f->addMember( beenden );
 
-	fenster = 0;
-	ref = 1;
-	s->release();
+    fenster = 0;
+    s->release();
 }
 
 // Destruktor
 Beenden::~Beenden()
 {
-	f->release();
-	if( fenster )
-		fenster->release();
+    f->release();
+    if( fenster )
+        fenster->release();
 }
 
 // nicht constant
 void Beenden::setFenster( Fenster *f )
 {
-	if( fenster )
-		fenster->release();
-	this->f->setPosition( f->getBreite() / 2 - 150, f->getHeight() / 2 - 75 );
-	fenster = f;
+    if( fenster )
+        fenster->release();
+    this->f->setPosition( f->getBreite() / 2 - 150, f->getHeight() / 2 - 75 );
+    fenster = f;
 }
 
 void Beenden::setSichtbar( bool s )
 {
-	sichtbar = s;
-	if( !fenster )
-		return;
-	if( s )
-		fenster->addMember( f->getThis() );
-	else
-		fenster->removeMember( f );
+    sichtbar = s;
+    if( !fenster )
+        return;
+    if( s )
+        fenster->addMember( dynamic_cast<Zeichnung *>( f->getThis() ) );
+    else
+        fenster->removeMember( f );
 }
 
 bool Beenden::beendenMausEreignis( void *obj, MausEreignis me )
 {
-	if( me.id == ME_RLinks )
-		PostQuitMessage( 0 );
-	return 1;
-}
-
-// constant
-
-// Reference Counting
-Abschnitt *Beenden::getThis()
-{
-	ref++;
-	return this;
-}
-
-Abschnitt *Beenden::release()
-{
-	ref--;
-	if( !ref )
-		delete this;
-	return 0;
+    if( me.id == ME_RLinks )
+        PostQuitMessage( 0 );
+    return 1;
 }
 
 // Ereignisse
 bool beendenBeendenMausEreignis( void *p, void *obj, MausEreignis me )
 {
-	if( !p )
-		return 0;
-	return ( (Beenden*)p )->beendenMausEreignis( obj, me );
+    if( !p )
+        return 0;
+    return ( (Beenden *)p )->beendenMausEreignis( obj, me );
 }

+ 10 - 16
SMP/Programm/Beenden/Beenden.h

@@ -8,24 +8,18 @@
 class Beenden : public Abschnitt
 {
 private:
-	Fenster *fenster;
-	Fenster *f;
-	int ref;
+    Fenster *fenster;
+    Fenster *f;
 
 public:
-	// Konstruktor
-	Beenden( Schrift *s, Bildschirm *b );
-	// Destruktor
-	~Beenden();
-	// nicht constant
-	virtual void setFenster( Fenster *f );
-	virtual void setSichtbar( bool s );
-	bool beendenMausEreignis( void *obj, MausEreignis me );
-	// constant
-
-	// Reference Counting
-	virtual Abschnitt *getThis();
-	virtual Abschnitt *release();
+    // Konstruktor
+    Beenden( Schrift *s, Bildschirm *b );
+    // Destruktor
+    ~Beenden();
+    // nicht constant
+    virtual void setFenster( Fenster *f );
+    virtual void setSichtbar( bool s );
+    bool beendenMausEreignis( void *obj, MausEreignis me );
 };
 
 // Ereignisse

+ 19 - 27
SMP/Render/Render.cpp

@@ -6,45 +6,37 @@
 Render::Render( Bildschirm *b )
     : Thread()
 {
-	bildschirm = b;
-	beendet = 0;
+    bildschirm = b;
+    beendet = 0;
 }
 
 // Destruktor
 Render::~Render()
 {
-	bildschirm->release();
+    bildschirm->release();
 }
 
 // nicht constant
 void Render::thread()
 {
-	ZeitMesser *timer = new ZeitMesser();
-	while( !beendet )
-	{
-		double tickVal = timer->getSekunden();
-		timer->messungStart();
-		bildschirm->tick( tickVal );
-		bildschirm->render();
-		if( tickVal < 1.0 / 30.0 )
-			Sleep( (int)( ( 1.0 / 30.0 - tickVal ) * 1000 ) );
-		timer->messungEnde();
-	}
-	timer->release();
-	beendet = 0;
-	run = 0;
+    ZeitMesser *timer = new ZeitMesser();
+    while( !beendet )
+    {
+        double tickVal = timer->getSekunden();
+        timer->messungStart();
+        bildschirm->tick( tickVal );
+        bildschirm->render();
+        if( tickVal < 1.0 / 30.0 )
+            Sleep( (int)( ( 1.0 / 30.0 - tickVal ) * 1000 ) );
+        timer->messungEnde();
+    }
+    timer->release();
+    beendet = 0;
+    run = 0;
 }
 
 void Render::beenden()
 {
-	beendet = 1;
-	warteAufThread( 1000 );
-}
-
-// löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-Thread *Render::release()
-{
-    if( ref == 2 && run )
-        beenden();
-    return Thread::release();
+    beendet = 1;
+    warteAufThread( 1000 );
 }

+ 0 - 2
SMP/Render/Render.h

@@ -20,8 +20,6 @@ public:
     // nicht constant
     virtual void thread();
     void beenden();
-    // löscht das objekt wenn es nicht mehr gebraucht wird und beendet den Thread
-    Thread *release() override;
 };
 
 #endif

+ 176 - 176
SMP/Start/Start.cpp

@@ -18,230 +18,230 @@
 // Laden Fenster Ereignis
 bool lFMausEreignis( void *p, void *f, MausEreignis me )
 {
-	return 1;
+    return 1;
 }
 
 void lFVorSchließEreignis( void *p, void *f )
 {
-	// Fenster nicht close
+    // Fenster nicht close
 }
 
 // Haupt Fenster Maus Ereignis
 bool hFMausEreignis( void *p, void *f, MausEreignis me )
 {
-	return 1;
+    return 1;
 }
 
 bool hFTastaturEreignis( void *p, void *f, TastaturEreignis me )
 {
-	return 1;
+    return 1;
 }
 
 void hFVorSchließEreignis( void *p, void *f )
 {
-	// Programm beenden
-	PostQuitMessage( 0 );
+    // Programm beenden
+    PostQuitMessage( 0 );
 }
 
 // Inhalt der LedeBildschirm Klasse aus Start.h
 // Konstruktor
 LadeBildschirm::LadeBildschirm( Schrift *s, InitDatei *d, WFenster *f )
-: Thread()
+    : Thread()
 {
-	bilder = new RessourceBild();
-	schriften = new RessourceSchrift();
-	schrift = s;
-	iD = d;
-	lF = f;
-	start();
+    bilder = new RessourceBild();
+    schriften = new RessourceSchrift();
+    schrift = s;
+    iD = d;
+    lF = f;
+    start();
 }
 
 // Destruktor
 LadeBildschirm::~LadeBildschirm()
 {
-	schrift->release();
-	iD->release();
-	lF->release();
-	bilder->release();
-	schriften->release();
+    schrift->release();
+    iD->release();
+    lF->release();
+    bilder->release();
+    schriften->release();
 }
 
 // nicht constant
 void LadeBildschirm::thread()
 {
-	// Fenster ertellen;
-	lF->setVerschiebbar( 1 );
-	lF->setSize( 300, 150 );
-	lF->setPosition( Bildschirmmitte( lF->getThis() ) );
-	lF->setMausAktion( lFMausEreignis );
-	lF->setVSchließAktion( lFVorSchließEreignis );
-	Bildschirm *lB = new Bildschirm3D( lF->getThis() );
-	lF->setBildschirm( lB->getThis() );
-	lB->setdeckFarbe( 0x00000000 );
-	lB->setRenderZeichnungen( 1 );
-	lB->update();
-	lF->setAnzeigeModus( 1 );
-	lB->render();
-	lB->tick( 0 );
-	// Tetfeld erstellen
-	TextFeld *lTF = new TextFeld();
-	lTF->setStyle( TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha | TextFeld::Style::Sichtbar || TextFeld::Style::VCenter || TextFeld::Style::Rahmen );
-	lTF->setSchriftZ( schrift->getThis() );
-	lTF->setText( "Initialisierung..." );
-	lTF->setSize( 300, 20 );
-	lTF->setPosition( 0, 130 );
-	lTF->setHintergrundFarbe( 0x88000000 );
-	lTF->setSchriftFarbe( 0xFFFFFFFF );
-	lTF->setRahmenFarbe( 0xFF808080 );
-	lB->addMember( lTF->getThis() );
-	lB->render();
-	lB->tick( 0 );
-	// Hintergrund laden
-	LTDBDatei *bD = new LTDBDatei();
-	bD->setDatei( iD->getWert( "LadenHintergrundDatei" ) );
-	bD->leseDaten( 0 );
-	BildZ *lBgB = new BildZ();
-	lBgB->setStyle( BildZ::Style::Sichtbar );
-	lBgB->setBildZ( bD->laden( 0, iD->getWert( "LadenHintergrundBild" ) ) );
-	lBgB->setSize( 300, 150 );
-	bD->release();
-	// rendern
+    // Fenster ertellen;
+    lF->setVerschiebbar( 1 );
+    lF->setSize( 300, 150 );
+    lF->setPosition( Bildschirmmitte( dynamic_cast<WFenster *>( lF->getThis() ) ) );
+    lF->setMausAktion( lFMausEreignis );
+    lF->setVSchließAktion( lFVorSchließEreignis );
+    Bildschirm *lB = new Bildschirm3D( dynamic_cast<WFenster *>( lF->getThis() ) );
+    lF->setBildschirm( dynamic_cast<Bildschirm *>( lB->getThis() ) );
+    lB->setdeckFarbe( 0x00000000 );
+    lB->setRenderZeichnungen( 1 );
+    lB->update();
+    lF->setAnzeigeModus( 1 );
+    lB->render();
+    lB->tick( 0 );
+    // Tetfeld erstellen
+    TextFeld *lTF = new TextFeld();
+    lTF->setStyle( TextFeld::Style::Hintergrund | TextFeld::Style::HAlpha | TextFeld::Style::Sichtbar || TextFeld::Style::VCenter || TextFeld::Style::Rahmen );
+    lTF->setSchriftZ( dynamic_cast<Schrift *>( schrift->getThis() ) );
+    lTF->setText( "Initialisierung..." );
+    lTF->setSize( 300, 20 );
+    lTF->setPosition( 0, 130 );
+    lTF->setHintergrundFarbe( 0x88000000 );
+    lTF->setSchriftFarbe( 0xFFFFFFFF );
+    lTF->setRahmenFarbe( 0xFF808080 );
+    lB->addMember( dynamic_cast<Zeichnung *>( lTF->getThis() ) );
+    lB->render();
+    lB->tick( 0 );
+    // Hintergrund laden
+    LTDBDatei *bD = new LTDBDatei();
+    bD->setDatei( iD->getWert( "LadenHintergrundDatei" ) );
+    bD->leseDaten( 0 );
+    BildZ *lBgB = new BildZ();
+    lBgB->setStyle( BildZ::Style::Sichtbar );
+    lBgB->setBildZ( bD->laden( 0, iD->getWert( "LadenHintergrundBild" ) ) );
+    lBgB->setSize( 300, 150 );
+    bD->release();
+    // rendern
     lB->removeMember( lTF );
-	lB->addMember( lBgB );
-	lB->addMember( lTF );
-	lB->render();
-	lB->tick( 0 );
-	// laden
-	InitDatei *lBD = new InitDatei( iD->zWert( "LadeBilder" )->getText() );
-	lBD->laden();
-	int anz = lBD->getWertAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		lTF->setText( lBD->zWert( i )->getText() );
-		lB->render();
-		lB->tick( 0 );
-		Text *w = lBD->zWert( i );
-		LTDBDatei *ltdb = new LTDBDatei();
-		ltdb->setDatei( w->getTeilText( 0, w->positionVon( '/', w->anzahlVon( '/' ) - 1 ) ) );
-		ltdb->leseDaten( 0 );
-		bilder->add( w->getTeilText( w->positionVon( '/', w->anzahlVon( '/' ) - 1 ) + 1 ), ltdb->laden( 0, w->getTeilText( w->positionVon( '/', w->anzahlVon( '/' ) - 1 ) + 1 ) ) );
-		ltdb->release();
-	}
-	lBD->release();
-	InitDatei *lSD = new InitDatei( iD->zWert( "LadeSchriften" )->getText() );
-	lSD->laden();
-	anz = lSD->getWertAnzahl();
-	for( int i = 0; i < anz; i++ )
-	{
-		lTF->setText( lSD->zWert( i )->getText() );
-		lB->render();
-		lB->tick( 0 );
-		LTDSDatei *ltds = new LTDSDatei();
-		ltds->setPfad( lSD->getWert( i ) );
-		ltds->leseDaten();
-		schriften->add( lSD->zName( i )->getText(), ltds->ladeSchrift() );
-		ltds->release();
-	}
-	lSD->release();
-	// Speicher freigeben
-	lF->setAnzeigeModus( 0 );
-	StopNachrichtenSchleife( lF->getFensterHandle() );
-	lF->zerstören();
-	lF->setBildschirm( 0 );
-	lB->release();
+    lB->addMember( lBgB );
+    lB->addMember( lTF );
+    lB->render();
+    lB->tick( 0 );
+    // laden
+    InitDatei *lBD = new InitDatei( iD->zWert( "LadeBilder" )->getText() );
+    lBD->laden();
+    int anz = lBD->getWertAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        lTF->setText( lBD->zWert( i )->getText() );
+        lB->render();
+        lB->tick( 0 );
+        Text *w = lBD->zWert( i );
+        LTDBDatei *ltdb = new LTDBDatei();
+        ltdb->setDatei( w->getTeilText( 0, w->positionVon( '/', w->anzahlVon( '/' ) - 1 ) ) );
+        ltdb->leseDaten( 0 );
+        bilder->add( w->getTeilText( w->positionVon( '/', w->anzahlVon( '/' ) - 1 ) + 1 ), ltdb->laden( 0, w->getTeilText( w->positionVon( '/', w->anzahlVon( '/' ) - 1 ) + 1 ) ) );
+        ltdb->release();
+    }
+    lBD->release();
+    InitDatei *lSD = new InitDatei( iD->zWert( "LadeSchriften" )->getText() );
+    lSD->laden();
+    anz = lSD->getWertAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        lTF->setText( lSD->zWert( i )->getText() );
+        lB->render();
+        lB->tick( 0 );
+        LTDSDatei *ltds = new LTDSDatei();
+        ltds->setPfad( lSD->getWert( i ) );
+        ltds->leseDaten();
+        schriften->add( lSD->zName( i )->getText(), ltds->ladeSchrift() );
+        ltds->release();
+    }
+    lSD->release();
+    // Speicher freigeben
+    lF->setAnzeigeModus( 0 );
+    StopNachrichtenSchleife( lF->getFensterHandle() );
+    lF->zerstören();
+    lF->setBildschirm( 0 );
+    lB->release();
 }
 
 // constant
 RessourceBild *LadeBildschirm::getBilder()
 {
-	return bilder->getThis();
+    return dynamic_cast<RessourceBild *>( bilder->getThis() );
 }
 
 RessourceSchrift *LadeBildschirm::getSchriften()
 {
-	return schriften->getThis();
+    return dynamic_cast<RessourceSchrift *>( schriften->getThis() );
 }
 
 // Start des Programms
 int KSGStart Framework::Start( Startparam p )
 {
-	Network::Start( 20 );
-	// Erstellen eines Fensters
-	WNDCLASS wc = F_Normal( p.hinst );
-	wc.lpszClassName = "SMP";
-	WFenster *lF = new WFenster();
-	lF->erstellen( WS_POPUP, wc );
-	// Laden von Schrift und Optionen
-	InitDatei *iD = new InitDatei( "data/start/optionen.ini" );
-	iD->laden();
-	LTDSDatei *sD = new LTDSDatei();
-	sD->setPfad( iD->getWert( "LadenSchriftDatei" ) );
-	sD->leseDaten();
-	Schrift *schrift = sD->ladeSchrift();
-	sD->release();
-	// Laden anderer Dateien
-	LadeBildschirm *lb = new LadeBildschirm( schrift, iD->getThis(), lF );
-	StartNachrichtenSchleife();
-	lb->warteAufThread( 1000 );
-	// Fortsetzung nach laden
-	RessourceBild *bilder = lb->getBilder();
-	RessourceSchrift *schriften = lb->getSchriften();
+    Network::Start( 20 );
+    // Erstellen eines Fensters
+    WNDCLASS wc = F_Normal( p.hinst );
+    wc.lpszClassName = "SMP";
+    WFenster *lF = new WFenster();
+    lF->erstellen( WS_POPUP, wc );
+    // Laden von Schrift und Optionen
+    InitDatei *iD = new InitDatei( "data/start/optionen.ini" );
+    iD->laden();
+    LTDSDatei *sD = new LTDSDatei();
+    sD->setPfad( iD->getWert( "LadenSchriftDatei" ) );
+    sD->leseDaten();
+    Schrift *schrift = sD->ladeSchrift();
+    sD->release();
+    // Laden anderer Dateien
+    LadeBildschirm *lb = new LadeBildschirm( schrift, dynamic_cast<InitDatei *>( iD->getThis() ), lF );
+    StartNachrichtenSchleife();
+    lb->warteAufThread( 1000 );
+    // Fortsetzung nach laden
+    RessourceBild *bilder = lb->getBilder();
+    RessourceSchrift *schriften = lb->getSchriften();
     lF->zerstören();
-	lb->release();
-	// Haupt Fenster erstellen
-	if( !iD->wertExistiert( "DisplayMonitor" ) )
-		iD->addWert( "DisplayMonitor", "0" );
-	int monitorId = TextZuInt( iD->zWert( "DisplayMonitor" )->getText(), 10 );
-	Monitor mon = getMonitor( monitorId );
-	if( !mon.existiert )
-		mon = getMonitor( 0 );
-	WFenster *hF = new WFenster();
-	hF->erstellen( WS_POPUP, wc );
-	hF->setPosition( Punkt( mon.x, mon.y ) );
-	hF->setSize( mon.breite, mon.height );
-	hF->setMausAktion( hFMausEreignis );
-	hF->setTastaturAktion( hFTastaturEreignis );
-	hF->setVSchließAktion( hFVorSchließEreignis );
-	Bildschirm *hB = new Bildschirm2D( hF->getThis() );
-	hF->setBildschirm( hB->getThis() );
-	hB->setdeckFarbe( 0x00000000 );
-	hB->setRenderZeichnungen( 1 );
+    lb->release();
+    // Haupt Fenster erstellen
+    if( !iD->wertExistiert( "DisplayMonitor" ) )
+        iD->addWert( "DisplayMonitor", "0" );
+    int monitorId = TextZuInt( iD->zWert( "DisplayMonitor" )->getText(), 10 );
+    Monitor mon = getMonitor( monitorId );
+    if( !mon.existiert )
+        mon = getMonitor( 0 );
+    WFenster *hF = new WFenster();
+    hF->erstellen( WS_POPUP, wc );
+    hF->setPosition( Punkt( mon.x, mon.y ) );
+    hF->setSize( mon.breite, mon.height );
+    hF->setMausAktion( hFMausEreignis );
+    hF->setTastaturAktion( hFTastaturEreignis );
+    hF->setVSchließAktion( hFVorSchließEreignis );
+    Bildschirm *hB = new Bildschirm2D( dynamic_cast<WFenster *>( hF->getThis() ) );
+    hF->setBildschirm( dynamic_cast<Bildschirm *>( hB->getThis() ) );
+    hB->setdeckFarbe( 0x00000000 );
+    hB->setRenderZeichnungen( 1 );
     hB->setTestRend( 0 );
-	hB->update();
-	hF->setAnzeigeModus( 1 );
-	hB->render();
-	hB->tick( 0 );
-
-	Programm *prog = new Programm( hB->getThis(), schriften->get( iD->zWert( "Schrift" )->getText() ) );
-
-	// Renderer erstellen
-	Render *r = new Render( hB->getThis() );
-	// Beenden Abschnitt Erstellen
-	Beenden *beenden = new Beenden( schriften->get( iD->zWert( "Schrift" )->getText() ), hB->getThis() );
-	prog->addAbschnitt( "Beenden", beenden );
-	// Mit Datenbank verbinden
-	// Login Abschnitt erstellen
-	Login *login = new Login( schriften->get( iD->zWert( "Schrift" )->getText() ), prog, iD->getThis(), bilder->getThis(), hB->getThis() );
-	prog->addAbschnitt( "Login", login );
-	prog->abschnittAuswählen( "Login" );
-	// Nachrichten verarbeiten
-	r->start();
-	StartNachrichtenSchleife();
-	r->beenden();
-
-	// Speicher freigeben
-	prog->release();
-
-	r->release();
-	hB->release();
-	hF->setBildschirm( 0 );
-	hF->release();
-
-	bilder->release();
-	schriften->release();
-	iD->release();
-
-	Network::Exit();
-
-	return 0;
+    hB->update();
+    hF->setAnzeigeModus( 1 );
+    hB->render();
+    hB->tick( 0 );
+
+    Programm *prog = new Programm( dynamic_cast<Bildschirm *>( hB->getThis() ), schriften->get( iD->zWert( "Schrift" )->getText() ) );
+
+    // Renderer erstellen
+    Render *r = new Render( dynamic_cast<Bildschirm *>( hB->getThis() ) );
+    // Beenden Abschnitt Erstellen
+    Beenden *beenden = new Beenden( schriften->get( iD->zWert( "Schrift" )->getText() ), dynamic_cast<Bildschirm *>( hB->getThis() ) );
+    prog->addAbschnitt( "Beenden", beenden );
+    // Mit Datenbank verbinden
+    // Login Abschnitt erstellen
+    Login *login = new Login( schriften->get( iD->zWert( "Schrift" )->getText() ), prog, dynamic_cast<InitDatei *>( iD->getThis() ), dynamic_cast<RessourceBild *>( bilder->getThis() ), dynamic_cast<Bildschirm *>( hB->getThis() ) );
+    prog->addAbschnitt( "Login", login );
+    prog->abschnittAuswählen( "Login" );
+    // Nachrichten verarbeiten
+    r->start();
+    StartNachrichtenSchleife();
+    r->beenden();
+
+    // Speicher freigeben
+    prog->release();
+
+    r->release();
+    hB->release();
+    hF->setBildschirm( 0 );
+    hF->release();
+
+    bilder->release();
+    schriften->release();
+    iD->release();
+
+    Network::Exit();
+
+    return 0;
 }