Formular fehlt



  • Hallo Informatiker,

    ich bastle zur Zeit an einem Schiffe versenken für die schule. Der plan ist, das Spielfeld auf der Oberfläche anzeigen zu lassen und per microController (8051 oder 8052) steuern zu lassen. Mal ganz davon abgesehen, dass die hälfte nicht so will, wie ich und ich das ganze am Montag (morgen) abgeben muss, hab ich das riesige Problem, dass das Programm zwar lädt und offen bleibt, ich aber keine Oberfläche habe um darauf zuzugreifen. Es kommt einfach NICHTS.

    https://www.dropbox.com/s/mqkz69ri4ib4xsm/NeuerOrdner.rar

    Hier könnt ihr das komplette Projekt(Turbo C++ 2006 von Borland) angucken. Auf wunsch schreib ich einzelne Code-Teile auch hier.

    Hier der Code zum Formular:

    SpielOberflaecheA.cpp:

    #include <vcl.h>
    #pragma hdrstop
    
    #include "SpielOberflaecheA.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    SpielSteuerung spiel(FeldA);
    FeldA->Rows[1]->Add("A");                //Koordinaten beschriften
    FeldA->Rows[2]->Add("B");
    FeldA->Rows[3]->Add("C");
    FeldA->Rows[4]->Add("D");
    FeldA->Rows[5]->Add("E");
    FeldA->Rows[6]->Add("F");
    FeldA->Rows[7]->Add("G");
    FeldA->Rows[8]->Add("H");
    FeldA->Rows[9]->Add("I");
    FeldA->Rows[10]->Add("J");
    
    FeldA->Cols[1]->Add("1");
    FeldA->Cols[2]->Add("2");
    FeldA->Cols[3]->Add("3");
    FeldA->Cols[4]->Add("4");
    FeldA->Cols[5]->Add("5");
    FeldA->Cols[6]->Add("6");
    FeldA->Cols[7]->Add("7");
    FeldA->Cols[8]->Add("8");
    FeldA->Cols[9]->Add("9");
    FeldA->Cols[10]->Add("10");              //***
    FeldA->Cells[5][5]= "A";                 //Test
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::btnNeuesSpielClick(TObject *Sender)
    {
    int wx, wy;
    wx = 1;            		//Wasser X
    wy = 1;                 //Wasser Y
    
    for (wx = 1;wx < 11;wx++) {
    	for (wy = 1; wy < 11; wy++) {
    		FeldA->Cells[wx][wy]= " ";
    	}
    }
    spieler = 0;
    
    for (schiff = 10; schiff > 0;schiff-- ) {
    	spiel->schiffBewegen(spieler);
    }
    /*
    spieler = 1;
    
    for (schiff = 10; schiff > 0; schiff--) {
    	spiel->schiffBewegen(spieler);
    }*/
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::btnSetzenClick(TObject *Sender)
    {
    spiel->setzeT4();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    Label1->Caption = spieler;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::btnZeigeClick(TObject *Sender)
    {
    spiel->zeigeSpielfeld(spieler);
    }
    //---------------------------------------------------------------------------
    

    SpielOberflaeche.h:

    #ifndef SpielOberflaecheAH
    #define SpielOberflaecheAH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <Grids.hpp>
    #include "KL_Spielsteuerung.h"
    #include "Kl_DatenModellController.h"
    //---------------------------------------------------------------------------
    class SpielSteuerung;
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
    	TLabel *Label1;
    	TButton *btnRechts;
    	TButton *btnRunter;
    	TButton *btnDS;
    	TStringGrid *FeldA;
    	TButton *btnNeuesSpiel;
    	TButton *btnSetzen;
    	TButton *btnZeige;
    	TTimer *Timer1;
    	void __fastcall btnNeuesSpielClick(TObject *Sender);
    	void __fastcall btnSetzenClick(TObject *Sender);
    	void __fastcall Timer1Timer(TObject *Sender);
    	void __fastcall btnZeigeClick(TObject *Sender);
    private:	// Benutzer-Deklarationen
    		int daten;
    		int schiff;
    		int spieler;
    		int controller;
    		SpielSteuerung *spiel;
    public:		// Benutzer-Deklarationen
    	__fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    wäre Super, wenn mir jemand helfen könnte, denn ohne Oberfläche kann ich nichts testen, was mich gerade ziemlich verzweifeln lässt!

    Danke schonmal im Vorraus

    Barnibas

    PS: (nur aus interesse) Ist es normal, dass im builder dauerhaft (nach dem start des programms) das Ereignisprotokoll angezeigt wird?



  • Ist Visible Deines Formulars vielleicht auf false gesetzt? Zeig mal Deine WinMain.



  • Wie sieht der Code von dem Hauptprogramm aus (<Projekt>.cpp)?

    Er sollte in etwa so aussehen:

    // ...
    
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    	try
    	{
    		Application->Initialize();
    		Application->CreateForm(__classid(TForm1), &Form1);
    		Application->Run();
    	}
    	catch (Exception &exception)
    	{
    		Application->ShowException(&exception);
    	}
    	return 0;
    }
    

    Wobei du die Form besser umbenennen solltest, z.B. MainForm oder BattleshipForm (oder auch SchiffeVersenkenForm, wenn du doch bei deutschen Bezeichnern bleiben willst).



  • mgaeckler schrieb:

    Ist Visible Deines Formulars vielleicht auf false gesetzt?

    Das war es, aber selbst wenn ich es auf true setze bleibt es weg.

    Das ist meine projektdatei:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    USEFORM("SpielOberflaecheA.cpp", Form1);
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    	try
    	{
    		Application->Initialize();
    		Application->CreateForm(__classid(TForm1), &Form1);
    		Application->Run();
    	}
    	catch (Exception &exception)
    	{
    		Application->ShowException(&exception);
    	}
    	catch (...)
    	{
    		try
    		{
    			throw Exception("");
    		}
    		catch (Exception &exception)
    		{
    			Application->ShowException(&exception);
    		}
    	}
    	return 0;
    }
    //---------------------------------------------------------------------------
    


  • Dann sollte sie eigentlich angezeigt werden.

    Was passiert denn genau? Beendet sich Dein Programm sofort oder läuft es im Hintergrund ohne ein Fenster zu öffnen?

    Was soll dieser catch( ... ) Block? Eine Exception zu werfen um sie gleich wieder aufzufangen macht wenig Sinn.

    mfg Martin



  • mgaeckler schrieb:

    Was passiert denn genau? Beendet sich Dein Programm sofort oder läuft es im Hintergrund ohne ein Fenster zu öffnen?

    Es läuft im Hintergrund, ohne dass sich ein fenster öffnet.

    mgaeckler schrieb:

    Was soll dieser catch( ... ) Block? Eine Exception zu werfen um sie gleich wieder aufzufangen macht wenig Sinn.

    ich hab keine ahnung, in der datei habe ich nichts geändert.



  • Dann debugge mal dein Programm (Haltepunkt setzen und dann Schritt für Schritt durchgehen). Evtl. hast du ja irgendwo eine Endlosschleife o.ä.



  • Übe mal den Umgang mit dem Debugger. Denn dann hättest Du gemerkt, daß Du beim Initialisieren Deines Formulars eine Endlosschleife programmiert hast:

    DatenModellController::DatenModellController(){
            int x, y;
            x = 0;
            y = 0;
            while (x < 10){
                    while (y < 10){
                            feld[x][y];
                            }
                    }
    }
    


  • mgaeckler schrieb:

    Denn dann hättest Du gemerkt, daß Du beim Initialisieren Deines Formulars eine Endlosschleife programmiert hast:

    du glaubst gar nicht wie sehr mich das gerade aufregt! Die funktion hab ich in eine geschrieben ... das sollte eine for-schleife sein! Vielen dank für deine hilfe!


Anmelden zum Antworten