Komponenten in eigener Funktion benutzen???



  • Hallo

    Ich vermute du hast bei einem der Parameter von funktion eine VCL-Komponentenklasse By Value anstatt wie es richtig wäre By Reference übergeben. Sprich : Es fehlt irgendwo ein Zeiger-*

    void function(TWinControl parent,...) // Falsch
    
    void function(TWinControl* parent,...) // Richtig : muß Zeiger sein
    

    bis bald
    akari



  • Also eigentlich hatte ich das richtig abgeschrieben, dacht ich:

    //Deklaration der Funktion
    void newcheck(TComponent*, TWinControl*, TCheckBox, int, int);
    
    //Funktion selber
    void newcheck(TComponent* owner, TWinControl* parent, TCheckBox check[], int i, int pos){
            // CheckBox für Aktivierung zur Simulation des Packvorgangs
    	check[i] = new TCheckBox(owner);
    	check[i]->Parent = parent;
    	check[i]->Left = 20;
    	check[i]->Top = 2 + i*30 - pos;
    	check[i]->Checked = true;
    
    }
    
    //Funktionsaufruf
    void __fastcall Tfrm_Packer::btn_addClick(TObject *Sender)
    {
        newcheck(this, scr_paletten, check_simulator, i,
            scr_paletten->VertScrollBar->Position);
    }
    

    Der Fehler kommt in der Zeile

    check[i] = new TCheckBox(owner);
    


  • Hallo

    Meine Vermutung ist fast richtig, und der Fehler basiert auf meinem Code. Auch im Array check müßen natürlich Pointer rein

    void newcheck(..., TCheckBox* check[], ...)
    

    bis bald
    akari



  • Achso 🙂 naja die Pointer und ich mögen uns noch nich so richtig xD da bin ich noch nicht ganz hintergestiegen.



  • Da hab ich mal noch ne kleine Frage 🙂 Wenn ich jetzt noch eine Caption-/Text-eigenschaft eines Labels oder Edits mit übergeben will, wie mache ich das am Besten? Kann man da auch so eine Klasse übergeben/ benutzen?



  • Hallo

    😕 Wenn du in deiner Generierungsfunktion gleich noch die Eigenschaft Label/Text auf einen bestimmten Wert setzen willst, dann übergib einfach noch ein AnsiString.

    //Deklaration der Funktion
    void newedit(TComponent*, TWinControl*, TEdit* edit[], int, int, AnsiString text);
    
    //Funktion selber
    void newedit(TComponent* owner, TWinControl* parent, TEdit* edit[], int i, int pos, AnsiString text){
            // CheckBox für Aktivierung zur Simulation des Packvorgangs
        edit[i] = new TEdit(owner);
        edit[i]->Parent = parent;
        edit[i]->Left = 20;
        edit[i]->Top = 2 + i*30 - pos;
        edit[i]->Text = text;
    
    }
    
    //Funktionsaufruf
    void __fastcall Tfrm_Packer::btn_addClick(TObject *Sender)
    {
        newedit(this, scr_paletten, edit_simulator, i,
            scr_paletten->VertScrollBar->Position, "Hallo");
    }
    

    bis bald
    akari



  • Aber sowas wie die Eigenschaft selber übergeben geht nicht?

    //Funktionsaufruf
    void __fastcall Tfrm_Packer::btn_addClick(TObject *Sender)
    {
        newedit(this, scr_paletten, check_simulator, i,
            scr_paletten->VertScrollBar->Position, edit2->Text);
    }
    


  • Hallo

    Selbstverständlich kannst du das so machen. Der AnsiString-Wert aus edit2->Text wird kopiert und an das neu erstellte Edit übergeben.

    bis bald
    akari



  • Ja ich hatte mir das ja auch so gedacht gehabt, aber leider bekam ich dann die Fehlermeldung:

    [BCC32 Fehler] start.cpp(165): E2285 Keine Übereinstimmung für 'newedit(Tfrm_startPacker * const,TScrollBox *,int,int,const int,UnicodeString)' gefunden

    Ich habs dann mit Char* to String und ähnlichem probiert, aber hatte alles nichts gebracht ...

    Edit:
    Fehler selber schon gefunden, es war das vergessen der Übergabe des Komponentennames. Mal wieder n doofer Anfängerfehler von mir 😛



  • Hallo

    Du hättest schon sagen können das du mit dem neusten Builder arbeitest... der verwendet anstelle von AnsiString eben UnicodeString 😉 . Also must du nur deine Funktion noch korrigieren:

    void newedit(TComponent*, TWinControl*, TEdit* edit[], int, int, UnicodeString text);
    

    Besser ist natürlich einfach String anstatt UnicodeString zu schreiben, dann sucht der Builder automatisch den richtigen Typ aus.

    bis bald
    akari



  • Hallo, kann mir jemand helfen????
    Bekomme diese Fehlermeldung:
    [bcc32 Fehler] Main_Unit.cpp(232): E2285 Keine Übereinstimmung für 'TForm4::TForm4(void *)' gefunden

    Form4 = new TForm4(static_cast<void *> (NULL));



  • Wieso schreibst du in einen 7 Jahre alten Thread und
    wo hast Du

    Form4 = new TForm4(static_cast<void *> (NULL));
    

    her. Der Compiler sagt dir es gibt keinen Konstruktor der einen void-Zeiger als Parameter hat.


Anmelden zum Antworten