Anlegen einer Variablen anderer Klasse mit Parameterübergabe(Konstruktor)



  • Hallo,

    ich hab mir eine Klasse erstellt, die was in eine Zelle eines StringGrids malt.
    Nun war die Aufgabe, nicht alles einzeln über SetFunktionen der Klasse zu übergeben sondern den Konstruktor dafür zu nutzen. In meiner Klasse sieht der dann so aus:

    __fastcall TMTeViewer::TMTeViewer(TStringGrid * sGrid, int Col, int Row, string ValueType)
    {
      	TeViewer_sGrid = sGrid;
        iCol = Col;
        iRow = Row;
    
        for(unsigned int i = 0;i < strlen(ValueType.c_str()); i++)
        {
        	ValueType[i] = toupper(ValueType[i]);
        }
    
        if(ValueType == "BOOL")
        {
        	isBool = true;
        }
        else
        {
        	isBool = false;
        }
    }
    

    In der aufrufenden Klasse(der Formklasse) soll die Klassenvariable überall bekannt sein, damit ich sie in jeder funktion nutzen kann. Ich hab also den Header meiner Klasse eingebunden und versucht die Variable anzulegen.

    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int Start;
    TMTeViewer  myViewer(Form1->sGrid,4,1,"bool");
    //---------------------------------------------------------------------------
    

    Es kommt keine Fehlermeldung, aber beim Starten schmiert das Prog ab. Mach ich den Aufruf im Konstruktor der Form geht es, aber da ist die Variable leider nicht überall bekannt. Ich hab versucht das so im Header der Form anzulegen:

    TMTeViewer myViewer();
    

    und dann mit

    myViewer(Form1->sGrid,4,1,"bool")  = new TMTeViewer;
    

    im Konstruktor der Form aufzurufen, aber das funzt auch nicht.
    Könnt ihr mir sagen, wie ich das am gescheitesten machen sollte?
    Vielen Dank schon mal

    Manuela



  • Hallo,

    sorry, mir passiert es immer wieder, das ich es mehrere Stunden versuche und keine Lösung finde, poste und danach selbst die Lösung finde.
    Also es scheint so zu funktionieren:

    //Deklaration
    TMTeViewer  *myViewer;
    //Aufruf
    myViewer  = new TMTeViewer(Form1->sGrid,4,1,"bool");
    

    wenn ihr nochne andere Lösung habt, ich bin für jeden Tip dankbar.



  • Hallo. Zu allererst ein kleiner Tipp: Kürzen:

    __fastcall TMTeViewer::TMTeViewer(TStringGrid * sGrid, int Col, int Row, string ValueType)
    {
      	TeViewer_sGrid = sGrid;
        iCol = Col;
        iRow = Row;
    
        for(unsigned int i = 0;i < strlen(ValueType.c_str()); i++)
        {
            ValueType[i] = toupper(ValueType[i]);
        }
        isBool = ValueType == "BOOL";
    }
    

    Wenn die Variable in der Klasse TForm1 bekannt sein soll, sollte es eine Klassenvariable sein, also:

    class TForm1: public TForm
    {
        [...]
        public:
            TMTeViewer*  myViewer;
    };
    

    Und im Konstrukter der Form:

    TForm1::TForm1(TComponent* AOwner)
    {
        myViewer=new TMTeViewer(Form1->sGrid,4,1,"bool");
    }
    

    Jetzt hast du in der ganzen Form einen Zeiger auf Komponente "TMTeViewer" zur Verfügung stehen. Probier mal meines aus, und sag mir ob es geklappt hat.

    MfG Windoof

    EDIT: Mensch... komm ich ma wieder zu spät 😉 Probiers mal trotzdem bitte. Danke.


Anmelden zum Antworten