Announcement

Collapse
No announcement yet.

Klasse extrahieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Klasse extrahieren

    Hi einfache Frage:
    Zur besseren Übersicht möchte ich meine selbsterstellten Klassen in seperaten Dateien ablegen.
    Derzeit steht alles in meiner Unit1.cpp
    Meine Frage ist, welcher Bestandteil der Klassendeklaration muss wo abgelegt werden und wie binde ich die zusätzlichen dateien dann ein.

    Zur Klasse gehört z.B folgender Code:
    Code:
    //---------------------------------------------------------------------------
    class TVektor
    {
    public:
      float x,y,v,w;
      void Erscheinen (void);
      void Kollision (void);
      TVektor (float xx, float yy,float vv, float ww);
    };
    TVektor *Vektor[10];
    //--------------------------------------------------------------------------
    TVektor::TVektor(float xx, float yy,float vv, float ww)            //Construktor
    {  x = xx; y = yy;v = vv, w = ww;}
    //------------------------------------------------------------------------------
    void TVektor::Erscheinen (void)                                    // Erscheinen
    {//}

  • #2
    Einbinden per include

    Deklarationen in die Header, Definitionen in die cpp
    Christian

    Comment


    • #3
      hat geklappt danke
      aber jetzt finde ich meine Form1 nicht mehr wenn ich diese in der Kreis.cpp anmalen will.
      z.B. so wie unten. Falls das wieder in OnPaint gehört, bitte ich um verzeihung aber leider hab ich s dann immer noch nicht kapiert:-). Ich habe also eine Klasse Kreise die per timer aktualisiert werden und neu hingezeichnet werden sollen. Kann mir da jemand weiterhelfen?


      Code:
      void TKreis::Erscheinen (void)                                    // Erscheinen
      {
      Form1->Canvas->Rectangle (50,50,100,100);
      }
      //--------------------------------------------------------------------------

      Comment


      • #4
        aber jetzt finde ich meine Form1 nicht me
        Findest du sie nicht mehr oder der Compiler??

        Grundregel


        Die vom C++Builder erstellen Klassen werden nicht strukturell geändert
        Je Klasse eine neue Unit anlegen (*.h,*.cpp)
        Christian

        Comment


        • #5
          Der Kreis soll ja auch gar nicht wissen wie man ihn auf die Form zeichnet. Die Form selbst zeichnet das Kreisobjekt. Das Objekt selbst stellt die Daten zur Verfügung damit die Form weis wohin mit dem Kreis und wie groß er sein muss

          Comment


          • #6
            Ja sehr richtig, aber die Daten des Kreises stehen ja nur in einer Funktion der Klasse Kreis zur Verfügung, ansonsten muss ich erst alles in Variablen der Form kopieren. Ich dachte eigentlich ich kann in einer Kreis Funktion auf die Form malen aber wie gesagt da findet er die form nicht mehr.

            ich gebe dem Kreis seine ganzen Infos (anfang ende größe farbe usw.) beim erstellen einer neuen Instanz jeweils mit.
            Kann ja wohl nicht sein das ich in der Form mit nem Timer eine verknüpfung zur Kreis.cpp erzeugen muss dann sämtliche Daten in Variablen kopieren dann wieder zurück und in der Form hinzeichnen. Geht das nicht auch einfacher?

            Comment


            • #7
              Geht das nicht auch einfacher?
              Ich habe das doch x-Mal beschrieben.

              Die Klasse Kreis leifert die Daten und zeichnet nicht.

              Im Onpaint werden aus der Klasse die Daten gelesen und gezeichnet. Wo genau ist das Problem?


              Kann ja wohl nicht sein das ich in der Form mit nem Timer eine verknüpfung zur Kreis.cpp erzeugen muss dann sämtliche Daten in Variablen kopieren dann wieder zurück und in der Form hinzeichnen. Geht das nicht auch einfacher?
              Wozu den das?

              Im OnPaint wird das Array aller aller Kreise abgearbeitet, aus jeder Instanz die Daten geholt und gezerichnet

              Die Klasse Kreis:

              int x
              int y
              int radusi

              Getter/ Setter

              Mehr braucht die Klasse nicht


              OnPaint:

              Schleife über alle Kreise (Array)
              Hole Instanz aus dem Array
              zeichne Kreis: circle(Instanz.getX()-Instanz.getRadius().......);
              Ende der Schleife

              Wenn du dein Verfahren beibehalten wilst, musst du die aktuelle Instanz der Form1 jeder neu angelegten Instanz deines Kreises mitgeben. Entweder über den Konstruktor oder über einen Setter
              Zuletzt editiert von Christian Marquardt; 09.09.2010, 09:07.
              Christian

              Comment


              • #8
                tut mir leid wenn ich euch in die verzweiflung treibe

                Ok grad eben den letzten Beitrag gelöscht.
                habs jetzt hingekriegt mit deklaration des Array a la: TStein *Stein[100]; in der Unit1.cpp
                hatte zwischendurch das problem das die stein.cpp die Steine[ ] nicht gefunden hat. Schon paradox.
                Naja ok hoffentlich letzte Frage erstmal.
                Im Onpaint wird alles gezeichnet aber wann? Nur wenn das Fenster neu aufgebaut wird. Ich möchte das aber gerne Timergesteuert haben, da die Steine ja über die Form wandern und das soll man auch sehen,
                d.h. ich brauche ein Refresh, der sich im Onpaint garnicht gut macht und eben einen Auslöser fürs Onpaint.
                Vielen Dank
                Jonny
                Zuletzt editiert von Jonnypony; 09.09.2010, 11:55.

                Comment


                • #9
                  Ein Fenster wird eigentlich dauernd gezeichnet wenn ich mich nicht irre

                  Der Timer verschiebt eigentlich nur die im Stein[] Array enthaltenen Steine. Beim darauffolgenden Zeichnen erscheinen die dann an der neuen Position. Ansonsten hat eine Form auch eine Invalidate Funktion (oder zumindest sowas ähnliches). Mit der kann man das Neuzeichnen der Form erzwingen.

                  Comment


                  • #10
                    super mit
                    Invalidate(); funktionierts und sieht viel besser aus als mit meinem eigenen ständigen refresh();
                    Danke

                    Comment

                    Working...
                    X