tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1206
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nobody24 Nobody24 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Hallo,

    folgendes Problem:

    Beim Programmstart soll ein Formular erscheinen, nachdem man dort auf einen Button geklickt hat, wird die Funktion "starte" von meiner Klasse "Steuerung" aufgerufen und das 1. Formular zerstört. Soweit kein Problem... nun soll aber in dieser Funktion "starte" ein 2. Formular erstellt werden. Hier hab ich jedoch keine Ahnung wie das funktionieren soll

    Ich weiß, dass man beide Formulare gleich beim Programmstart erstellen lassen kann und das 2. dann erst sichtbar machen kann, wen man es braucht. Jedoch ist das von der Aufgabenstellung her nicht erwünscht.

    Ich verwende den Borland C Builder 5 und dementsprechend natürlich VCL...

    Hoffe ihr könnt mir helfen. Danke schon mal im voraus.
     

  2. #2
    GillBates GillBates ist offline Mitglied Silber
    Registriert seit
    Oct 2007
    Ort
    BW
    Beiträge
    69
    solange die beiden Formulare nicht Modal sind, ist das kein Problem.

    Form1->Show(); // das funktioniert ja schon

    in der Funktion 'starte' dann:
    Form2->Show();

    Natürlich müssen beide Formulare davor erstellt sein, entw. mit new oder unter Projektoptionen -> Formulare - automatisch erzeugen.

    Das wars


    grüssle
     
    GillBates


    Hab' gerade einen Intel und einen AMD aus dem 3. Stock geworfen ... der AMD war tatsächlich schneller!

    [X] <-- Nail here for new Monitor

  3. #3
    Nobody24 Nobody24 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Danke, habs jetzt hinbekommen

    Hab nun aber ein neues Problem...

    Wenn ich nun bei SpielSteuerung::spieleZug

    " ShowMessage(dasSpielBlatt[0]->gibPunkte(0));"

    aufrufe bekomm ich ne Fehlermeldung "Im Projekt... ist eine Exeception der Klasse EAccessViolation... aufgetreten." und das ganze Programm stürzt ab...

    Führe ich genau die selbe Aktion allerdings in SpielSteuerung::starteSpiel aus, funktioniert es.

    Und mir ist absolut schleierhaft, was da falsch läuft -.-

    SpielSteuerung.cpp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    void SpielSteuerung::starteSpiel(AnsiString pSpielerName1, AnsiString pSpielerName2)
    {
      dieSpielOberFlaeche->Show();
     
      dasSpielBlatt[0] = new SpielBlatt(pSpielerName1);
      dasSpielBlatt[1] = new SpielBlatt(pSpielerName2);
     
      //Komischerweis funktioniert es hier...
      ShowMessage(dasSpielBlatt[0]->gibPunkte(0));
     
    void SpielSteuerung::spieleZug(AnsiString pFigurName)
    {
      ShowMessage(dasSpielBlatt[0]->gibPunkte(0));
    }

    SpielSteuerung.h
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    class TdieSpielOberFlaeche;
    class SpielBlatt;
     
    class SpielSteuerung
    {
          private:
            TdieSpielOberFlaeche *dieSpielOberFlaeche;
            SpielBlatt *dasSpielBlatt[2];
     
          public:
            SpielSteuerung(TdieSpielOberFlaeche *of);
            void starteSpiel(AnsiString pSpielerName1, AnsiString pSpielerName2);
            void spieleZug(AnsiString pFigurName);
    };

    SpielBlatt.h
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    class SpielBlatt
    {
          private:
            int punkteStand[13];
     
          public:
            int gibPunkte(int pNrSpiel);
    };

    SpielBlatt.cpp
    Code :
    1
    2
    3
    4
    
    int SpielBlatt::gibPunkte(int pNrSpiel)
    {
      return punkteStand[pNrSpiel];
    }
     

  4. #4
    GillBates GillBates ist offline Mitglied Silber
    Registriert seit
    Oct 2007
    Ort
    BW
    Beiträge
    69
    Zitat Zitat von Nobody24 Beitrag anzeigen
    Danke, habs jetzt hinbekommen

    Hab nun aber ein neues Problem...

    Wenn ich nun bei SpielSteuerung::spieleZug

    " ShowMessage(dasSpielBlatt[0]->gibPunkte(0));"

    aufrufe bekomm ich ne Fehlermeldung "Im Projekt... ist eine Exeception der Klasse EAccessViolation... aufgetreten." und das ganze Programm stürzt ab...

    Führe ich genau die selbe Aktion allerdings in SpielSteuerung::starteSpiel aus, funktioniert es.

    Und mir ist absolut schleierhaft, was da falsch läuft -.-
    Mir nicht

    du erstellst 'dasSpielBlatt[...]' in der Funktion 'starteSpiel(...)'.
    In der Funktion 'spieleZug(...)' ist das erstellte Objekt aber nicht bekannt, und schon wird eine Exception geschmissen

    Erstelle mal die dasSpielBlatt Dinger global in der Klasse, dann klappts auch mit dem Zugriff.

    grüssle
     
    GillBates


    Hab' gerade einen Intel und einen AMD aus dem 3. Stock geworfen ... der AMD war tatsächlich schneller!

    [X] <-- Nail here for new Monitor

  5. #5
    Nobody24 Nobody24 ist offline Grünschnabel
    Registriert seit
    Oct 2010
    Beiträge
    3
    Ich habs jetzt denk ich selber hinbekommen.

    Ich denke das Problem war, dass ich weil ich 2. Oberflächen habe, iwas bei den Assoziationen vermurkst habe.
    Dann ist da iwas mit den Konstruktoren schiefe gelaufen und ich hatte wohl 2 Steuerungen, statt nur eine und dann hab ich immer auf die Steuerung zugegriffen, in der keine Spielblätter vorhanden waren, da sie nur in der 1. Steuerung erstellt wurden... naja, es funktioniert ja jetzt xD

    Trozdem vielen Danke für deine Hilfe

    Noch rein interessehalber:
    - Lieg ich da jetzt komplett falsch, aber da ich ja auf die Objekte, die ich mit new erstellt habe über einen Zeiger zugreife, ist es doch egal, wo die erstell worden sind?

    - Wie hast du das gemeint mit "erstelle mal die dasSpielBlatt Dinger global in der Klasse"? Da steht mir iwie einer auf der Leitung, wie das gemeint war xD
     

  6. #6
    GillBates GillBates ist offline Mitglied Silber
    Registriert seit
    Oct 2007
    Ort
    BW
    Beiträge
    69
    Zitat Zitat von Nobody24 Beitrag anzeigen
    Ich habs jetzt denk ich selber hinbekommen.

    ...
    - Wie hast du das gemeint mit "erstelle mal die dasSpielBlatt Dinger global in der Klasse"? Da steht mir iwie einer auf der Leitung, wie das gemeint war xD
    global in der Klasse bedeutet z. B. im Konstruktor. Dann ist es in der ganzen Klasse sichtbar.


    grüssle
     
    GillBates


    Hab' gerade einen Intel und einen AMD aus dem 3. Stock geworfen ... der AMD war tatsächlich schneller!

    [X] <-- Nail here for new Monitor

Ähnliche Themen

  1. Formular sich selbst aufrufen lassen
    Von Kai-Behncke im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 07.03.07, 10:52
  2. Formular-Bezeichnung hovern lassen...
    Von bigfella im Forum CSS
    Antworten: 5
    Letzter Beitrag: 30.09.06, 15:41
  3. Formular automatisch auswählen lassen
    Von PHP-Fan im Forum PHP
    Antworten: 1
    Letzter Beitrag: 18.09.06, 02:37
  4. Mit einem Formular Module & Prozedure auflisten lassen
    Von knowledge im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 28.09.05, 17:10
  5. Antworten: 0
    Letzter Beitrag: 28.10.04, 08:17